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 documento, você usará 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
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.
Você vai precisar de dois projetos para este tutorial. As etapas a seguir se aplicam aos dois projetos.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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 usando uma imagem pré-criada,
us-docker.pkg.dev/cloudrun/container/hello
:gcloud run deploy hello \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=$REGION
Quando o URL do serviço for exibido, 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 gcloud storage buckets create gs://$BUCKET --location=${REGION}
Crie uma notificação do Pub/Sub para o bucket com o tópico no segundo projeto:
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
Faça upload de um arquivo no bucket:
echo "Hello World" > random.txt gcloud storage 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 já existente e quer mantê-lo sem as alterações incluídas com este tutorial, exclua os recursos criados para o tutorial.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
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 acionador.Exclua o tópico do 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 seu coletor.