Receber eventos diretos do Cloud Storage (CLI gcloud)
Neste guia de início rápido, mostramos como receber eventos diretos do Cloud Storage (sem usar os Registros de auditoria do Cloud) em um serviço do Cloud Run não autenticado usando o Eventarc.
É possível configurar o acionamento de notificações em resposta a vários eventos dentro de um bucket do Cloud Storage: criação, exclusão e arquivamento de objetos e atualizações de metadados. Para mais informações, consulte Criar um gatilho para rotear eventos do Cloud Storage para o Cloud Run.
Neste guia de início rápido, você fará as seguintes tarefas:
Criar um bucket do Cloud Storage para ser a origem do evento.
Implantar um serviço de receptor de eventos no Cloud Run
Criar um gatilho do Eventarc.
Gerar um evento fazendo upload de um arquivo no bucket do Cloud Storage e visualizá-lo nos registros do Cloud Run.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito do Google Cloud.
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
Ative as APIs Cloud Build, Cloud Run, Cloud Storage, Eventarc e Pub/Sub.
gcloud services enable \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ pubsub.googleapis.com \ run.googleapis.com \ storage.googleapis.com
- Atualize os componentes
gcloud
:gcloud components update
- Faça login usando sua conta:
gcloud auth login
- Defina as variáveis de configuração usadas neste guia de início rápido:
gcloud config set run/region us-central1 gcloud config set run/platform managed gcloud config set eventarc/location us-central1
-
Se você for o criador do projeto, receberá o papel de proprietário básico (
roles/owner
). Por padrão, esse papel do gerenciamento de identidade e acesso (IAM) inclui as permissões necessárias para acesso total à maioria dos recursos do Google Cloud, e você pode pular esta etapa.Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço (para aplicativos e cargas de trabalho de computação). Para mais informações, consulte a página Papéis e permissões do destino do evento.
Permissões necessárias
Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:
-
Editor do Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador do Cloud Run (
roles/run.admin
) -
Administrador do Eventarc (
roles/eventarc.admin
) -
Acessador de exibição de registros (
roles/logging.viewAccessor
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) -
Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin
) -
Administrador de armazenamento (
roles/storage.admin
)
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
-
Editor do Cloud Build (
A conta de serviço padrão do Compute Engine é criada automaticamente depois de ativar ou usar um serviço do Google Cloud que usa o Compute Engine.
Para fins de teste, é possível anexar essa conta de serviço a um gatilho do Eventarc para representar a identidade do gatilho. Observe o formato de e-mail a ser usado ao criar um acionador:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo número do projeto do Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
A conta de serviço do Compute Engine recebe automaticamente o papel básico de Editor (
roles/editor
) no seu projeto. No entanto, se as concessões automáticas de papéis tiverem sido desativadas, consulte as instruções aplicáveis em Papéis e permissões para criar uma nova conta de serviço e conceder os papéis necessários.- Conceda o
papel de receptor de eventos
do Eventarc (
roles/eventarc.eventReceiver
) no projeto à conta de serviço padrão do Compute Engine para que o gatilho do Eventarc possa receber eventos de provedores de eventos.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- Antes de criar um gatilho para eventos diretos do Cloud Storage,
conceda o papel de Editor
do Pub/Sub (
roles/pubsub.publisher
) ao agente de serviço do Cloud Storage, um conta de serviço gerenciada:SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'
- Se você ativou o agente de serviço do Cloud Pub/Sub até 8 de abril de 2021, para oferecer suporte a solicitações push autenticadas do Pub/Sub, conceda o papel Criador de token da conta de serviço. (
roles/iam.serviceAccountTokenCreator
) à conta de serviço gerenciada pelo Google. Caso contrário, esse papel é concedido por padrão:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
- Faça o download e instale a ferramenta de gerenciamento de código-fonte Git.
crie um bucket do Cloud Storage
Crie um bucket do Cloud Storage para usar como origem do evento:gsutil mb -l us-central1 gs://PROJECT_ID-bucket/
Depois que a origem do evento é criada, implante o serviço de receptor de eventos no Cloud Run.
Implantar o serviço de receptor de eventos no Cloud Run
Implante um serviço do Cloud Run que recebe e registra eventos.
Clone o repositório e altere para o diretório que contém o código de amostra do Cloud Run:
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
Crie o contêiner e faça upload dele para o Cloud Build:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld-events
Implante a imagem do contêiner no Cloud Run:
gcloud run deploy helloworld-events \ --image gcr.io/PROJECT_ID/helloworld-events \ --allow-unauthenticated
Quando a implantação for bem-sucedida, a linha de comando exibirá o URL de serviço.
Agora que você implantou o serviço de receptor de eventos chamado
helloworld-events
no Cloud Run, configure o gatilho.
Criar um gatilho do Eventarc
O gatilho do Eventarc envia eventos do
bucket do Cloud Storage para o
serviço helloworld-events
do Cloud Run.
Crie um gatilho que filtre edventos do Cloud Storage e que use a conta de serviço parão do Compute Engine.
gcloud eventarc triggers create storage-events-trigger \ --destination-run-service=helloworld-events \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Isso gera um gatilho chamado
storage-events-trigger
.Ao criar um gatilho do Eventarc pela primeira vez em um projeto do Google Cloud, pode haver um atraso no provisionamento do agente de serviço do Eventarc. Esse problema geralmente pode ser resolvido ao tentar criar o acionador novamente. Para mais informações, consulte Erros de permissão negada.
Para confirmar se
storage-events-trigger
foi criado, execute:gcloud eventarc triggers list --location=us-central1
A saída será assim:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE storage-events-trigger google.cloud.storage.object.v1.finalized helloworld-events Yes
Gerar e visualizar um evento
Para gerar um evento, faça upload de um arquivo de texto para o Cloud Storage.
echo "Hello World" > random.txt gsutil cp random.txt gs://PROJECT_ID-bucket/random.txt
O upload gera um evento e o serviço do Cloud Run registra a mensagem do evento.
Para visualizar a entrada de registro, filtre as entradas e retorne a saída no formato JSON:
gcloud logging read 'textPayload: "Detected change in Cloud Storage bucket"'
Procure uma entrada de registro semelhante a esta:
"textPayload": "2021/08/09 19:04:25 Detected change in Cloud Storage bucket: objects/random.txt"
Parabéns! Você implantou com sucesso um serviço de receptor de eventos no Cloud Run, criou um gatilho do Eventarc, gerou um evento a partir do Cloud Storage e o visualizou nos registros do Cloud Run.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud com esses recursos.
O Cloud Run não gera custos quando o serviço não está em uso, mas ainda é possível receber cobranças pelo armazenamento da imagem do contêiner no Container Registry, pelo armazenamento de arquivos no bucket do Cloud Storage e por recursos do Eventarc.
Você pode:
Se preferir, exclua o projeto do Google Cloud para evitar cobranças. A exclusão do projeto do Google Cloud interrompe o faturamento de todos os recursos usados no projeto.
Exclua um projeto do Google Cloud:
gcloud projects delete PROJECT_ID