Este tutorial mostra como usar o Eventarc para ler eventos de uma origem num projeto e encaminhá-los para um destino noutro projeto. Google Cloud Google Cloud Isto é possível através da utilização do Pub/Sub como uma camada de transporte entre projetos.
Objetivos
Neste tutorial, vai:
Criar um tópico num projeto e, em seguida, publicar nesse tópico a partir de outro projeto. Isto encaminha eventos para um serviço do Cloud Run não autenticado através de um acionador do Eventarc.
Use notificações do Pub/Sub para o Cloud Storage para publicar eventos do Cloud Storage de um projeto para outro. Encaminhe os eventos para um serviço do Cloud Run não autenticado através de um acionador do Eventarc.
Use destinos do Cloud Logging para publicar registos de auditoria do Cloud de um projeto para outro. Encaminhe os eventos para um serviço do Cloud Run não autenticado através de um acionador do Eventarc.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.
Tenha em atenção que precisa de dois projetos para este tutorial. Os passos seguintes aplicam-se a ambos os 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Atualize os componentes do gcloud:
gcloud components update
- Inicie sessão com a sua conta:
gcloud auth login
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
Substitua
PROJECT_TWO_ID
pelo ID do seu segundo Google Cloud projeto.No segundo projeto, faça o seguinte:
Ative as APIs Cloud Run e Eventarc:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Predefina a localização:
REGION=REGION
Substitua
REGION
pela localização do Eventarc suportada à sua escolha. Por exemplo,us-central1
.Crie um tópico do Pub/Sub:
TOPIC=my-topic gcloud pubsub topics create $TOPIC
Implemente um serviço do Cloud Run não autenticado com 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 vir o URL do serviço, a implementação está concluída.
Associe o tópico ao serviço com um acionador 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
Esta ação cria um acionador denominado
cross-project-trigger
.
Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
Substitua
PROJECT_ONE_ID
pelo ID do seu primeiro Google Cloud projeto.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 Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme que o evento gerado foi registado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
É devolvida uma entrada de registo semelhante à seguinte:
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
Crie um contentor 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 Pub/Sub para o contentor no tópico do seu segundo projeto:
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
Carregue um ficheiro para o contentor:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme que o evento gerado foi registado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
É devolvida uma entrada de registo semelhante à seguinte:
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", [...] }
Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
No seu primeiro projeto, ative os tipos de registos Admin Read, Data Read e Data Write para o Compute Engine:
Tenha em atenção que, ao nível do projeto, precisa da função de gestão de identidade e de acesso (IAM) para configurar os registos de auditoria de acesso a dados para os seus recursos.
roles/owner
Google CloudLeia a política IAM do seu projeto e armazene-a num ficheiro:
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
Editar
/tmp/policy.yaml
, adicionando ou alterando apenas a configuração dos registos de auditoria de acesso aos dados.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.com
Escreva a sua nova Política IAM:
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
Se o comando anterior comunicar um conflito com outra alteração, repita estes passos, começando por ler a política de IAM do projeto.
No primeiro projeto, crie um destinatário do Cloud Logging para encaminhar os registos de auditoria do Google 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"'
Deve ser devolvido um lembrete semelhante ao seguinte:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, conceda a função à 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 email da conta de serviço devolvido no passo anterior.Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
No seu primeiro projeto, crie uma instância de VM do Compute Engine.
Se estiver a usar a Google Cloud consola para criar a instância da VM, pode aceitar as predefinições para os fins deste tutorial.
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme que o evento gerado foi registado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
É devolvida uma entrada de registo semelhante à seguinte:
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", } [...] }
- 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.
Elimine o serviço do Cloud Run que implementou neste tutorial:
gcloud run services delete SERVICE_NAME
Onde
SERVICE_NAME
é o nome do serviço escolhido.Também pode eliminar serviços do Cloud Run a partir da Google Cloud consola.
Remova todas as configurações predefinidas da CLI gcloud que adicionou durante a configuração do tutorial.
Por exemplo:
gcloud config unset run/region
ou
gcloud config unset project
Elimine outros Google Cloud recursos criados neste tutorial:
Elimine o acionador do Eventarc:
Substituagcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
pelo nome do seu acionador.Elimine o tópico Pub/Sub:
Substituagcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_ID
pelo ID do seu tópico.Elimine o destino do Cloud Logging:
Substituagcloud logging sinks delete SINK_NAME
SINK_NAME
pelo nome do seu destino.
Encaminhe eventos Pub/Sub entre projetos
Uma vez que o Pub/Sub é um serviço distribuído globalmente, pode criar um tópico num projeto, publicar nesse tópico a partir de outro projeto e, em seguida, acionar o Eventarc, que encaminha a mensagem para um serviço do Cloud Run:
Encaminhe eventos do Cloud Storage entre projetos
Use notificações do Pub/Sub para o Cloud Storage para publicar eventos de um projeto para outro e, em seguida, encaminhar os eventos para um serviço do Cloud Run através de um acionador do Eventarc:
Encaminhe eventos dos registos de auditoria do Google Cloud entre projetos
Os pedidos ao seu serviço podem ser acionados quando é criada uma entrada do registo de auditoria que corresponde aos critérios de filtro do acionador. (Para mais informações, consulte o artigo Determine os filtros de eventos para os registos de auditoria do Cloud.) Neste caso, quando é criada uma instância de VM do Compute Engine no seu primeiro projeto, uma entrada do registo de auditoria que corresponda aos critérios de filtro do acionador permite-lhe capturar e encaminhar um evento para um serviço do Cloud Run no segundo projeto:
Limpar
Se criou um novo projeto para este tutorial, elimine o projeto. Se usou um projeto existente e quer mantê-lo sem as alterações adicionadas neste tutorial, elimine os recursos criados para o tutorial.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto: