Neste tutorial, ensinamos como solucionar erros de ambiente de execução encontrados ao usar o Eventarc para rotear eventos do Cloud Storage para um serviço do Cloud Run não autenticado usando os Registros de auditoria do Cloud.
Criar um repositório padrão do Artifact Registry
Crie um repositório padrão do Artifact Registry para armazenar a imagem do contêiner:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Substitua REPOSITORY por um nome exclusivo para o
repositório.
Criar um bucket do Cloud Storage
Crie um bucket do Cloud Storage em cada uma das duas regiões como a origem do evento para o serviço do Cloud Run:
Crie um bucket em
us-east1:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
Crie um bucket em
us-west1:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
Depois que a origem do evento for criada, implante o serviço de receptor de eventos no Cloud Run.
Implantar o receptor de eventos
Implante um serviço do Cloud Run que recebe e registra eventos.
Clone o repositório do GitHub para recuperar o exemplo de código:
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storageJava
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-storageNode.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storagePython
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storageRevise o código deste tutorial, que consiste no seguinte:
Um manipulador de eventos que recebe o evento de entrada como um CloudEvent na solicitação HTTP
POST:Go
Java
.NET
Node.js
Python
Um servidor que usa o manipulador de eventos:
Go
Java
.NET
Node.js
Python
Um Dockerfile que define o ambiente operacional do serviço. O conteúdo do Dockerfile varia por linguagem.
Go
Java
.NET
Node.js
Python
Crie a imagem do contêiner com o Cloud Build e faça upload da imagem para o Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
Implante a imagem do contêiner no Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
Quando a implantação for bem-sucedida, a linha de comando exibirá o URL de serviço.
Criar um gatilho
Depois de implantar um serviço do Cloud Run, configure um gatilho para detectar eventos do Cloud Storage por meio de registros de auditoria.
Crie um gatilho do Eventarc para detectar eventos do Cloud Storage que são roteados usando os Registros de auditoria do Cloud:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.comIsso gera um gatilho chamado
troubleshoot-trigger.Para confirmar se
troubleshoot-triggerfoi criado, execute:gcloud eventarc triggers listA saída será semelhante a esta:
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
Gerar e visualizar um evento
Confirme se você implantou o serviço e pode receber eventos do Cloud Storage.
Crie e faça upload de um arquivo no bucket de armazenamento
BUCKET1:echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txtMonitore os registros para verificar se o serviço recebeu um evento. Para conferir a entrada de registro, siga estas etapas:
Filtre as entradas de registro e retorne a saída no formato JSON:
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=jsonProcure uma entrada de registro semelhante a esta:
"textPayload": "Detected change in Cloud Storage bucket: ..."
Inicialmente, nenhuma entrada de registro é retornada. Isso indica que há um problema na configuração que você precisa investigar.
Investigar o problema
Investigue por que o serviço não está recebendo eventos.
Tempo de inicialização
O gatilho é criado imediatamente, mas pode levar até dois minutos para que ele seja propagado e filtre eventos. Execute o seguinte comando para confirmar se um gatilho está ativo:
gcloud eventarc triggers list
A saída indica o status do gatilho. No exemplo a seguir,
troubleshoot-trigger estará ativo às 14:16:56:
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
Quando o gatilho estiver ativo, faça upload de um arquivo novamente para o bucket de armazenamento. Os eventos são gravados nos registros de serviço do Cloud Run. Se o serviço não receber eventos, ele poderá estar relacionado ao tamanho dos eventos.
Registros de auditoria
Neste tutorial, os eventos do Cloud Storage são roteados usando os registros de auditoria do Cloud e enviados para o Cloud Run. Confirme se os registros de auditoria estão ativados para o Cloud Storage.
No console Google Cloud , acesse a página Registros de auditoria.
- Marque a caixa de seleção Google Cloud Storage.
- Verifique se os tipos de registro Leitura de administrador, Leitura de dados e Gravação de dados estão selecionados.
Depois de ativar os Registros de auditoria do Cloud, faça o upload do arquivo novamente para o bucket de armazenamento e verifique os registros. Se o serviço ainda não receber eventos, o motivo pode estar relacionado ao local do gatilho.
Local do gatilho
Pode haver vários recursos em locais diferentes, e você precisa filtrar eventos de origens que estão na mesma região que o destino do Cloud Run. Para mais informações, consulte locais compatíveis com o Eventarc e saiba mais sobre os locais do Eventarc.
Neste tutorial, você implantou o serviço do Cloud Run em
us-central1. Como você definiu eventarc/location como us-central1, também criou
um gatilho no mesmo local.
No entanto, você criou dois buckets do Cloud Storage nos locais us-east1 e
us-west1. Para receber eventos desses locais, é preciso criar gatilhos do Eventarc nesses locais.
Crie um gatilho do Eventarc localizado em us-east1:
Confirme o local do gatilho atual:
gcloud eventarc triggers describe troubleshoot-triggerDefina o local e a região como
us-east1:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1Implante o receptor de eventos novamente criando e implantando a imagem do contêiner no Cloud Run.
Crie um novo gatilho localizado em
us-east1:gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.comVerifique se o gatilho foi criado:
gcloud eventarc triggers listUm gatilho pode levar até dois minutos para ser inicializado antes de começar a rotear eventos.
Para confirmar se o gatilho está implantado corretamente, gere e visualize um evento.
Outros problemas que você pode encontrar
Talvez você encontre outros problemas ao usar o Eventarc.
Tamanho do evento
Os eventos enviados não podem exceder os limites de tamanho do evento.
Um gatilho que enviou eventos anteriormente parou de funcionar
Verifique se a origem está gerando eventos. Verifique os registros de auditoria do Cloud e se o serviço monitorado está emitindo registros. Se os registros forem gravados, mas os eventos não forem entregues, entre em contato com o suporte.
Verifique se há um tópico do Pub/Sub com o mesmo nome de gatilho. O Eventarc usa o Pub/Sub como a camada de transporte e vai usar um tópico do Pub/Sub atual ou criar automaticamente um tópico e gerenciá-lo para você.
- Para listar os gatilhos, consulte
gcloud eventarc triggers list. Para listar os tópicos do Pub/Sub, execute:
gcloud pubsub topics listVerifique se o nome do tópico do Pub/Sub inclui o nome do gatilho criado. Por exemplo:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Se o tópico do Pub/Sub estiver ausente, crie o gatilho novamente para um provedor, tipo de evento e destino do Cloud Run específicos.
- Para listar os gatilhos, consulte
Verifique se o gatilho foi configurado para o serviço.
No console do Google Cloud , acesse a página Serviços.
Clique no nome do serviço para abrir a página Detalhes do serviço.
Clique na guia Gatilhos.
O gatilho do Eventarc associado ao serviço precisa ser listado.
Verifique a integridade do tópico e da assinatura do Pub/Sub usando os tipos de métricas do Pub/Sub.
É possível monitorar mensagens encaminhadas que não podem ser entregues usando a métrica
subscription/dead_letter_message_count. Essa métrica mostra o número de mensagens não entregues que o Pub/Sub encaminha de uma assinatura.Se as mensagens não forem publicadas no tópico, verifique os Registros de auditoria do Cloud e verifique se o serviço monitorado está emitindo registros. Se os registros forem gravados, mas os eventos não forem entregues, entre em contato com o suporte.
É possível monitorar assinaturas de push usando a métrica
subscription/push_request_counte agrupando-a porresponse_codeesubcription_id.Se forem relatados erros de push, verifique os registros de serviço do Cloud Run. Se o endpoint de recebimento retornar um código de status não OK, isso indica que o código do Cloud Run não está funcionando como esperado e você precisa entrar em contato com o suporte.
Para mais informações, consulte Criar políticas de alertas de limite de métrica.