Neste tutorial, mostramos como usar o Eventarc para ler eventos a partir de uma origem em um projeto do Google Cloud e ecaminhá-los para um destino em outro projeto do Google Cloud. Isso é possível usando o Pub/Sub como uma camada de transporte entre projetos.
Objetivos
Com este tutorial, você vai:
criar um tópico em um projeto e publicá-lo em outro projeto. Isso encaminha eventos para um serviço não autenticado do Cloud Run usando um gatilho do Eventarc;
usar as notificações do Pub/Sub para publicar eventos do Cloud Storage de um projeto para outro. Encaminhe os eventos para um serviço não autenticado do Cloud Run usando um gatilho Eventarc;
usar coletores do Cloud Logging para publicar registros de auditoria do Cloud de um projeto para outro. Encaminhe os eventos para um serviço não autenticado do Cloud Run usando um gatilho do Eventarc.
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.
Antes de começar
Algumas das etapas deste documento podem não funcionar corretamente se sua organização aplicar restrições ao ambiente do Google Cloud. Nesse caso, talvez não seja possível concluir tarefas como criar endereços IP públicos ou chaves de contas de serviço. Se você fizer uma solicitação que retorne um erro sobre restrições, veja como Desenvolver aplicativos em um ambiente restrito do Google Cloud.
Você vai precisar de dois projetos para este tutorial. As etapas a seguir se aplicam aos dois projetos.
- 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.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Atualize os componentes da gcloud:
gcloud components update
- Faça login usando sua conta:
gcloud auth login
Encaminhar eventos do Pub/Sub entre projetos
Como o Pub/Sub é um serviço distribuído globalmente, é possível criar um tópico em um projeto, publicá-lo em outro projeto e acionar o Eventarc, que encaminhará a mensagem para um serviço do Cloud Run:
Defina o ID do projeto do Google Cloud como o segundo projeto:
gcloud config set project PROJECT_TWO_ID
Substitua
PROJECT_TWO_ID
pelo ID do segundo projeto do Google Cloud.No segundo projeto, faça o seguinte:
Ative as APIs do Cloud Run e do Eventarc:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Defina o local padrão:
REGION=REGION
Substitua
REGION
pelo local compatível com o Eventarc de sua escolha. Por exemplo,us-central1
.Crie um tópico do Pub/Sub:
TOPIC=my-topic gcloud pubsub topics create $TOPIC
Implante um serviço não autenticado do Cloud Run:
gcloud run deploy hello \ --image=gcr.io/cloudrun/hello \ --allow-unauthenticated \ --region=$REGION
Quando você vir o URL do serviço, a implantação estará concluída.
Conecte o tópico ao serviço com um gatilho do Eventarc:
gcloud eventarc triggers create cross-project-trigger \ --destination-run-service=hello \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_TWO_ID/topics/$TOPIC
Isso cria um gatilho chamado
cross-project-trigger
.
Defina o ID do projeto do Google Cloud como seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
Substitua
PROJECT_ONE_ID
pelo ID do primeiro projeto do Google Cloud.No primeiro projeto, publique uma mensagem no tópico do segundo projeto:
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
Defina o ID do projeto do Google Cloud como o segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme se o evento gerado foi registrado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
Uma entrada de registro semelhante a esta será retornada:
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
Encaminhar eventos do Cloud Storage entre projetos
Use notificações do Pub/Sub para Cloud Storage para publicar eventos de um projeto para outro e, em seguida, encaminhe os eventos para um serviço do Cloud Run por um gatilho do Eventarc:
Defina o ID do projeto do Google Cloud como seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
Crie um bucket do Cloud Storage:
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gsutil mb -l $REGION gs://$BUCKET
Crie uma notificação do Pub/Sub para o bucket com o tópico no segundo projeto:
gsutil notification create -t projects/PROJECT_TWO_ID/topics/$TOPIC -f json gs://$BUCKET
Faça upload de um arquivo no bucket:
echo "Hello World" > random.txt gsutil cp random.txt gs://$BUCKET/random.txt
Defina o ID do projeto do Google Cloud como o segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme se o evento gerado foi registrado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
Uma entrada de registro semelhante a esta será retornada:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: { "kind": "storage#object", "id": "project1-cross-project/random.txt/1635327604259719", "selfLink": "https://www.googleapis.com/storage/v1/b/project1-cross-project/o/random.txt", "name": "random.txt", "bucket": "project1-cross-project", "generation": "1635327604259719", [...] }
Encaminhar eventos de registros de auditoria do Cloud entre projetos
As solicitações para o serviço podem ser acionadas quando uma entrada de registro de auditoria for criada e corresponder aos critérios de filtro do gatilho. (Para mais informações, consulte Determinar filtros de evento para registros de auditoria do Cloud.) Neste caso, quando uma instância de VM do Compute Engine é criada no primeiro projeto, uma entrada de registro de auditoria que corresponde aos critérios de filtro do gatilho permite capturar e encaminhar um evento para um serviço do Cloud Run no segundo projeto:
Defina o ID do projeto do Google Cloud como seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
No primeiro projeto, ative os tipos de registro Leitura de administradores, Leitura de dados e Gravação de dados para o Compute Engine:
No nível do projeto, é preciso ter o papel de gerenciamento de identidade e acesso
roles/owner
para configurar os registros de auditoria de acesso a dados para os recursos do Google Cloud.Leia a política de IAM do projeto e guarde-a em um arquivo:
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
Edite
/tmp/policy.yaml
, adicionando ou alterando apenas a configuração dos registros de auditoria de acesso a dados.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.com
Grave a nova política de IAM:
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
Se o comando anterior relatar um conflito com outra alteração, repita essas etapas, começando com a leitura da política de IAM do projeto.
No primeiro projeto, crie um coletor do Cloud Logging para encaminhar os registros de auditoria do Cloud para o tópico no segundo projeto:
gcloud logging sinks create cross-project-sink \ pubsub.googleapis.com/projects/PROJECT_TWO_ID/topics/my-topic \ --log-filter='protoPayload.methodName="beta.compute.instances.insert"'
Um lembrete semelhante ao seguinte será retornado:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Defina o ID do projeto do Google Cloud como o segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, conceda o papel à conta de serviço:
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
Substitua
SERVICE_ACCOUNT
pelo endereço de e-mail da conta de serviço retornado na etapa anterior.Defina o ID do projeto do Google Cloud como seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
No primeiro projeto, crie uma instância de VM do Compute Engine.
Se você estiver usando o Console do Google Cloud para criar a instância de VM, aceite os padrões para os fins deste tutorial.
Defina o ID do projeto do Google Cloud como o segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme se o evento gerado foi registrado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
Uma entrada de registro semelhante a esta será retornada:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Eventdata: { "logName": "projects/workflows-atamel/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1635330842489-5cf5321f4f454-ecc363cd-3883c08d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "methodName": "beta.compute.instances.insert", } [...] }
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 o tópico Pub/Sub:
gcloud pubsub topics delete TOPIC TOPIC_ID
SubstituaTOPIC_ID
pelo ID do tópico.Exclua o coletor do Cloud Logging:
gcloud logging sinks delete SINK_NAME
SubstituaSINK_NAME
pelo nome do coletor.