Neste tutorial, você verá como solucionar erros de ambiente de execução encontrados ao implantar eventos do Cloud Storage usando os registros de auditoria do Cloud em um serviço não autenticado do Cloud Run.
Objetivos
- Criar um bucket do Cloud Storage para ser a origem do evento.
- Crie, faça upload e implante uma imagem de contêiner no Cloud Run.
- Criar gatilhos do Eventarc
- Faça upload do arquivo para o bucket do Cloud Storage.
- Solucione problemas e corrija erros de ambiente de execução.
Custos
Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Limpeza.
Antes de começar
Siga os pré-requisitos em Receber um evento de registros de auditoria do Cloud.
crie um bucket do Cloud Storage
Crie dois buckets de armazenamento em duas regiões como a origem do evento para o serviço do Cloud Run:
us-east1
export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gsutil mb -l us-east1 gs://${BUCKET1}
us-west1
export BUCKET2="troubleshoot-bucket2-$PROJECT_ID" gsutil mb -l us-west1 gs://${BUCKET2}
Depois que a origem do evento for criada, implante o serviço de receptor de eventos no Cloud Run.
Recuperar a amostra de código
Clone o repositório:
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
Revisar o código
O código deste tutorial consiste em:
Um servidor que processa mensagens recebidas encapsuladas em um CloudEvent dentro da solicitação HTTP POST:
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
Enviar o código
Para enviar o código, siga estas etapas:
Crie a imagem do contêiner com o Cloud Build e faça o upload para o Container Registry:
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
Após a conclusão, uma mensagem de "SUCESSO" é exibida com o ID, o horário de criação e o nome da imagem. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
Java
- Use o auxiliar de credencial gcloud para autorizar o Docker a enviar o contêiner para o Container Registry.
gcloud auth configure-docker
Use o plug-in do Maven do Jib para criar e enviar por push o contêiner ao Container Registry.
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/audit-storage
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
audit-storage
é o nome do contêiner. Após a conclusão, uma mensagem de "SUCESSO" é exibida. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
.NET
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
Após a conclusão, uma mensagem de "SUCESSO" é exibida com o ID, o horário de criação e o nome da imagem. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
Após a conclusão, uma mensagem de "SUCESSO" é exibida com o ID, o horário de criação e o nome da imagem. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
Após a conclusão, uma mensagem de "SUCESSO" é exibida com o ID, o horário de criação e o nome da imagem. A imagem é armazenada no Container Registry e poderá ser reutilizada, se você quiser.
- Use o auxiliar de credencial gcloud para autorizar o Docker a enviar o contêiner para o Container Registry.
Implante a imagem do contêiner no Cloud Run:
gcloud run deploy troubleshoot-service --image gcr.io/PROJECT_ID/audit-storage \ --allow-unauthenticated
Substitua PROJECT_ID pelo ID do projeto do GCP.
audit-storage
é o nome do contêiner etroubleshoot-service
é o nome do serviço do Cloud Run.A imagem do contêiner é implantada no serviço e na região que você configurou anteriormente ao configurar o gcloud.
Ao implantar no Cloud Run, responda
y
, "Sim", ao prompt permitir não autenticado. Para mais detalhes sobre a autenticação baseada em IAM, consulte Papéis e permissões do Eventarc.Quando a implantação for bem-sucedida, a linha de comando exibirá o URL de serviço.
Criar um gatilho
Agora que você implantou um serviço do Cloud Run, configure um gatilho para detectar eventos do Cloud Storage por meio de registros de auditoria.
Crie um gatilho de registro de auditoria para detectar eventos do Cloud Storage:
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.com
Isso cria um gatilho chamado
troubleshoot-trigger
.Para confirmar se
troubleshoot-trigger
foi criado, execute:gcloud eventarc triggers list
troubleshoot-trigger
é exibido listado com um destino detroubleshoot-service
.
Gerar e visualizar um evento
Para confirmar que você implantou o serviço e pode receber eventos do Cloud Storage:
Crie e faça upload de um arquivo no primeiro bucket de armazenamento:
echo "Hello World" > random.txt gsutil cp random.txt gs://${BUCKET1}/random.txt
Monitore os registros para verificar se o serviço recebeu um evento. Os registros de serviço mostram que o serviço está detectando eventos, indicando um problema na configuração:
Now listening on: http://0.0.0.0:8080
Investigar o problema
Agora é possível passar pelo processo de investigação do motivo pelo qual o serviço não está recebendo eventos.
Registros de auditoria
Neste tutorial, os eventos do Cloud Storage são emitidos por meio de registros de auditoria e enviados ao Cloud Run. Verifique se os registros de auditoria estão ativados para o Cloud Storage.
- Acesse IAM e administrador > Registros de auditoria e marque a caixa de seleção Google Cloud Storage. Acessar o console de registros de auditoria do Cloud
- Verifique se os tipos de registro de leitura, leitura e gravação dos registros de auditoria do Cloud estão selecionados.
Depois de ativar os registros de auditoria do Cloud, faça upload do arquivo novamente e verifique os registros. O serviço ainda não recebe eventos e isso pode estar relacionado à localização 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.
Neste tutorial, você implantou o serviço do Cloud Run em us-central1
.
Você também criou um gatilho no mesmo local porque eventarc/location
estava definido como us-central1
.
Para listar o local do gatilho, descreva o gatilho:
gcloud eventarc triggers describe troubleshoot-trigger
No entanto, você criou dois buckets em locais us-east1
e us-west1
. Para receber eventos desses locais, é necessário criar acionadores neles.
Vamos criar um gatilho em us-east1
.
Exclua o gatilho existente no local
us-central1
:gcloud eventarc triggers delete troubleshoot-trigger
Defina o local e a região como
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Envie o código novamente.
Crie um novo gatilho no local
us-east1
: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.com
Verifique se o gatilho foi criado:
gcloud eventarc triggers list
Um gatilho pode levar até 10 minutos para ser inicializado antes de começar a entregar eventos.
Tempo de inicialização
Depois que os gatilhos são criados, há até 10 minutos de tempo de inicialização antes do início dos eventos. Execute o seguinte comando para confirmar se os gatilhos estão ativos:
gcloud eventarc triggers list
Uma resposta semelhante é exibida para indicar o status do acionador:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE
troubleshoot-trigger3 google.cloud.audit.log.v1.written troubleshoot-service2 By 14:16:56
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service Yes
Após 10 minutos, faça upload de um arquivo novamente para cada bucket. Os eventos de cada arquivo 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.
Tamanho do evento
Os eventos enviados não podem exceder os limites de tamanho do evento (512 KB).
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.
- Para listar acionadores, consulte gcloud eventarc trigger list.
Para listar os tópicos do Pub/Sub, execute:
gcloud pubsub topics list
Verifique se o nome do tópico do Pub/Sub inclui o nome do gatilho criado. Se o tópico do Pub/Sub estiver ausente, crie um tópico ao criar o gatilho.
Verifique a integridade do tópico do Pub/Sub:
Verifique se há uma marca de seleção check_circle na guia Gatilhos. No Console do Cloud, acesse Cloud Run e selecione o serviço criado. e acesse a guia Gatilhos.
Acesse Pub/Sub > Tópicos e clique no tópico do Pub/Sub.
Monitore se as mensagens forem publicadas no tópico com a métrica:
topic/send_message_operation_count
. 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.Monitore se as mensagens forem enviadas por push para o Cloud Run com a métrica:
subscription/push_request_count
porresponse_code
.No Console do Cloud, acesse o Cloud Monitoring.
Adicione seu projeto a um novo espaço de trabalho.
Clique em Painéis e selecione o painel Cloud Pub/Sub.
No painel Cloud Pub/Sub, clique no tópico do Pub/Sub que você criou.
Na seção Incidents, clique em Create Policy.
Na página Criar política de alertas, clique em Adicionar condição.
Na guia Métrica, forneça as seguintes condições:
- Assinatura do Cloud Pub/Sub como o Tipo de recurso.
- Solicitações de envio como a Métrica.
- response_code como o Agrupar por.
- 0 como o Limite de configuração.
Para mais informações sobre métricas de uso do Pub/Sub, consulte Como monitorar assinaturas de push.
Clique em Add para acessar a página Create alerting policy.
Na seção Quais são as etapas para corrigir o problema?, forneça um nome de alerta, por exemplo,
samplealert
, e clique em Salvar.Para ver o alerta, acesse Monitoring > Dashboard > Cloud Pub/Sub. Clique no tópico Pub/Sub e na guia Assinatura.
Se os erros de push forem informados, 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.
Limpar
Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluir o projeto que você criou para o tutorial.
Para excluir o projeto:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
delete-tutorial-resources
Exclua o serviço do Cloud Run que você implantou neste tutorial:
gcloud run services delete SERVICE_NAME
SERVICE_NAME
é o nome escolhido do serviço.Também é possível excluir os serviços do Cloud Run no Console do Google Cloud.
Remova as configurações padrão do gcloud CLI que você adicionou durante a configuração do tutorial.
Exemplo:
gcloud config unset run/region
ou
gcloud config unset project
Exclua outros recursos do Google Cloud criados neste tutorial:
- Exclua o gatilho do Eventarc:
gcloud eventarc triggers delete TRIGGER_NAME
SubstituaTRIGGER_NAME
pelo nome do gatilho.
- Exclua a imagem de contêiner denominada
gcr.io/PROJECT_ID/audit-storage
do Container Registry. Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
- Exclua o gatilho do Eventarc:
A seguir
- Para resolver outros problemas que podem ser encontrados ao usar o Eventarc, consulte Resolver problemas.