Receber eventos usando mensagens do Pub/Sub (Terraform)
Neste guia de início rápido, mostramos como usar o Terraform para criar um gatilho do Eventarc que recebe eventos diretos do Pub/Sub e os encaminha para um serviço do Cloud Run. Para mais informações sobre como usar o Terraform para criar gatilhos do Eventarc, consulte Criar um gatilho usando o Terraform.
Neste guia de início rápido, você vai fazer o seguinte:
Prepare-se para implantar o Terraform.
Defina uma configuração do Terraform que faça o seguinte:
- Ativar APIs.
- Crie uma conta de serviço.
- Crie um tópico do Pub/Sub como um provedor de eventos.
- Implante um serviço no Cloud Run como destino de evento.
- Criar um gatilho do Eventarc.
Aplique a configuração do Terraform.
Isso permite gerar um evento publicando uma mensagem no tópico do Pub/Sub. O gatilho do Eventarc encaminha a mensagem para o serviço de receptor de eventos implantado no Cloud Run, e o serviço registra a mensagem do evento, fornecendo um exemplo simples de uma arquitetura orientada a eventos.
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 de Google Cloud .
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, 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.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Cloud Resource Manager e Identity and Access Management (IAM):
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Não é necessário fazer isso se você estiver usando o Cloud Shell.
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Cloud Resource Manager e Identity and Access Management (IAM):
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Não é necessário fazer isso se você estiver usando o Cloud Shell.
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
- Se você estiver usando um projeto atual para este guia, verifique se tem as permissões necessárias para concluir o processo. Se você criou um projeto, já tem as permissões necessárias.
Permissões necessárias
Para conseguir as permissões necessárias a fim de concluir o guia de início rápido, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
- Administrador do Cloud Run (
roles/run.admin) - Administrador do Eventarc (
roles/eventarc.admin) - Acessador de exibição de registros (
roles/logging.viewAccessor) - Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin) - Publicador do Pub/Sub (
roles/pubsub.publisher) - Administrador da conta de serviço (
roles/iam.serviceAccountAdmin) - Usuário da conta de serviço (
roles/iam.serviceAccountUser)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
- Administrador do Cloud Run (
Preparar a implantação do Terraform
Antes de implantar qualquer recurso do Terraform, crie um arquivo de configuração do Terraform. Um arquivo de configuração do Terraform permite definir o estado final preferido da infraestrutura usando a sintaxe do Terraform.
Se você estiver usando um shell local, instale o Terraform.
O Terraform já está integrado ao ambiente do Cloud Shell, e você pode usar o Cloud Shell para implantar seus recursos do Terraform sem precisar instalar o Terraform.
No Cloud Shell ou no shell local, defina o projeto Google Cloud padrão em que você quer aplicar a configuração do Terraform. Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Substitua
PROJECT_IDpelo ID do seu projeto do Google Cloud .Observe que as variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz. Crie um diretório e um novo arquivo nele:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Substitua
DIRECTORYpelo nome do diretório do Terraform.O nome do arquivo precisa ter a extensão
.tf. Por exemplo, neste guia de início rápido, o arquivo de configuração émain.tf.
Definir sua configuração do Terraform
Copie os seguintes snippets de código do Terraform no arquivo main.tf. Ou, para copiar
todo o exemplo de código do GitHub, no canto superior direito de um snippet de código,
clique em
>
Ver no GitHub.
Ativar APIs
Para ativar as APIs necessárias para aplicar a configuração do Terraform, use o recurso do Terraform
google_project_service:
Criar uma conta de serviço
Cada gatilho do Eventarc está associado a uma conta de serviço
do IAM. Para criar uma conta de serviço dedicada para fins de teste, use
o
recurso do Terraform
google_service_account:
Se você ativou o agente de serviço do Pub/Sub até 8 de abril
de 2021, conceda o papel
Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator)
ao agente de serviço.
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
Criar um tópico do Pub/Sub como um provedor de eventos
Para criar um tópico do Pub/Sub, use o
recurso do Terraform
google_pubsub_topic. Para conceder à sua conta de serviço o papel de
Publicador do Pub/Sub (roles/pubsub.publisher) no nível do tópico, use o recurso do
Terraform google_pubsub_topic_iam_member:
Implantar um receptor de eventos no Cloud Run
Para criar um serviço do Cloud Run como destino de evento, use o recurso do Terraform google_cloud_run_v2_service. Para conceder à sua conta de serviço o papel de
Invocador do Cloud Run (roles/run.invoker) no nível do serviço, use o
recurso do Terraform
google_cloud_run_v2_service_iam_member:
Criar um gatilho do Eventarc
Para criar um gatilho do Eventarc que detecte mensagens do
Pub/Sub, use o recurso do
Terraform google_eventarc_trigger:
Aplique a configuração do Terraform:
Use a CLI do Terraform para provisionar a infraestrutura com base no arquivo de configuração. Para mais informações, consulte Comandos básicos do Terraform.
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade:terraform init -upgrade
Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
terraform plan
Corrija a configuração conforme necessário.
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yesno prompt:terraform apply
Normalmente, você aplica toda a configuração de uma só vez. No entanto, você também pode segmentar um recurso específico. Exemplo:
terraform apply -target="google_eventarc_trigger.default"
Depois de ativar as APIs, pode levar alguns minutos para que a ação seja propagada antes de você implantar outros recursos. Se você encontrar um problema, tente aplicar a configuração do Terraform de novo.
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
Verificar a criação de recursos
Confirme se o serviço do Cloud Run foi criado:
gcloud run services list --region us-central1A saída será semelhante a esta:
SERVICE: hello-events REGION: us-central1 URL: https://hello-events-13335919645.us-central1.run.app LAST DEPLOYED BY: ... LAST DEPLOYED AT: 2024-12-16T15:00:52.606160ZConfirme se o gatilho do Eventarc foi criado:
gcloud eventarc triggers list --location us-central1A saída será semelhante a esta:
NAME: trigger-pubsub-cloudrun-tf TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
Gerar e visualizar um evento de tópico do Pub/Sub.
É possível gerar um evento publicando uma mensagem no tópico do Pub/Sub. O gatilho do Eventarc encaminha a mensagem para o serviço de receptor de eventos implantado no Cloud Run, e o serviço registra a mensagem do evento.
Encontre e defina o tópico do Pub/Sub como uma variável de ambiente:
gcloud config set eventarc/location us-central1 export RUN_TOPIC=$(gcloud eventarc triggers describe trigger-pubsub-cloudrun-tf \ --format='value(transport.pubsub.topic)')Para gerar um evento, publique uma mensagem no tópico do Pub/Sub:
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"O evento é encaminhado ao serviço do Cloud Run, que registra a mensagem do evento.
Filtre as entradas de registro criadas pelo seu serviço:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
Procure uma entrada de registro semelhante a esta:
jsonPayload: ... message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World!'
Você usou o Terraform para implantar um serviço de receptor de eventos no Cloud Run e criar um gatilho do Eventarc. Depois de gerar um evento do Pub/Sub, você pode conferir nos registros do Cloud Run.
Limpar
Ao concluir as tarefas descritas neste guia de início rápido, é possível evitar o faturamento contínuo excluindo os recursos criados.
Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes no prompt:
terraform destroy
Se preferir, exclua o projeto Google Cloud para evitar cobranças. A exclusão do projeto Google Cloud interrompe o faturamento de todos os recursos usados nele.
Excluir um projeto do Google Cloud :
gcloud projects delete PROJECT_ID
Se você planeja ver vários tutoriais e guias de início rápido, a reutilização de projetos pode evitar que você exceda os limites da cota do projeto.