Use o Eventarc para receber eventos do Cloud Storage

Este tutorial mostra como implementar uma aplicação em contentores através de um serviço do Cloud Run autenticado que recebe eventos através do Eventarc.

Ao especificar filtros para um acionador do Eventarc, pode configurar o encaminhamento de eventos, incluindo a origem do evento e o destino do evento. Neste caso, uma atualização a um contentor do Cloud Storage aciona o evento e é enviado um pedido ao seu serviço do Cloud Run sob a forma de um pedido HTTP.

Crie um repositório padrão do Artifact Registry

Crie um repositório padrão do Artifact Registry para armazenar a sua imagem de contentor:

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

Substitua REPOSITORY por um nome exclusivo para o repositório.

Crie um contentor do Cloud Storage

Crie um contentor do Cloud Storage para usar como origem de eventos:

gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1

Depois de criar a origem de eventos, pode implementar o serviço de receção de eventos no Cloud Run.

Implemente um recetor de eventos no Cloud Run

Implemente um serviço do Cloud Run que receba e registe eventos.

  1. Clone o repositório do GitHub:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.

    Ir

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git

    Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.

  2. Altere para o diretório que contém o código de exemplo do Cloud Run:

    Node.js

    cd nodejs-docs-samples/eventarc/audit-storage/

    Python

    cd python-docs-samples/eventarc/audit-storage/

    Ir

    cd golang-samples/eventarc/audit_storage/

    Java

    cd java-docs-samples/eventarc/audit-storage/

    C#

    cd dotnet-docs-samples/eventarc/audit-storage/
  3. Crie o contentor para o serviço do Cloud Run:

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=helloworld-events
    gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  4. Implemente a imagem do contentor no Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  5. No comando Allow public access to helloworld-events (y/N)?, responda n para "Não".

Quando vir o URL do serviço do Cloud Run, a implementação está concluída.

Crie um acionador do Eventarc

O acionador do Eventarc envia eventos do contentor do Cloud Storage para o serviço do Cloud Run.helloworld-events O serviço requer autenticação e o evento deve ser acionado por um autor da chamada que tenha uma conta de serviço com as funções e as autorizações do IAM necessárias para usar o recurso.

  1. Crie um acionador que filtre eventos do Cloud Storage:

    gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.storage.object.v1.finalized" \
        --event-filters="bucket=PROJECT_ID-bucket" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Esta ação cria um acionador denominado helloworld-events.

    Tenha em atenção que, quando cria um acionador do Eventarc pela primeira vez num projeto, pode haver um atraso no aprovisionamento do agente do serviço Eventarc. Google Cloud Normalmente, pode resolver este problema tentando criar o acionador novamente. Para mais informações, consulte o artigo Erros de acesso negado.

  2. Confirme que o acionador foi criado com êxito. Tenha em atenção que, embora o acionador seja criado imediatamente, pode demorar até dois minutos para que um acionador fique totalmente funcional.

    gcloud eventarc triggers list --location=${REGION}

    O resultado deve ser semelhante ao seguinte:

    NAME: helloworld-events
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Cloud Run service: helloworld-events
    ACTIVE: Yes
    

Gere e veja um evento

Carregue um ficheiro de texto para o contentor do Cloud Storage para gerar um evento que é encaminhado para o serviço do Cloud Run. O serviço do Cloud Run regista o evento nos registos do serviço.

  1. Para gerar um evento:

    Carregue um ficheiro de texto para o Cloud Storage:

     echo "Hello World" > random.txt
     gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    O carregamento gera um evento e o serviço do Cloud Run regista a mensagem do evento.

  2. Para ver a entrada do registo:

    1. Filtre as entradas do registo e devolva o resultado no formato JSON:

      gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
      
    2. Procure uma entrada de registo semelhante a:

      "textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
      

Os registos podem demorar alguns momentos a aparecer. Se não os vir imediatamente, verifique novamente após um minuto.