Receber eventos usando mensagens do Pub/Sub (CLI gcloud)
Neste guia de início rápido, mostramos como implantar um serviço não autenticado do Cloud Run (totalmente gerenciado) que recebe eventos usando o Pub/Sub.
Neste guia de início rápido, você fará as seguintes tarefas:
Implantar um serviço de receptor de eventos no Cloud Run
Criar um gatilho do Eventarc.
Publicar uma mensagem em um tópico do Pub/Sub para gerar um evento e visualizá-la nos registros do Cloud Run
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 Google Cloud de.
- Faça login na sua Google Cloud conta do. Se você é novo no Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: a seleção de um projeto não exige um papel específico do IAM. Você pode selecionar qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, você precisa do papel de criador de projetos
(
roles/resourcemanager.projectCreator), que contém aresourcemanager.projects.createpermissão. Saiba como conceder papéis.
-
Crie um Google Cloud projeto:
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o Google Cloud projeto que você está criando. -
Selecione o Google Cloud projeto que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do seu Google Cloud projeto.
-
Verifique se o faturamento está ativado para seu Google Cloud projeto.
Ative as APIs Cloud Run, Cloud Logging, Pub/Sub e Eventarc:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de Service Usage role (
roles/serviceusage.serviceUsageAdmin), que contém aserviceusage.services.enablepermissão. Saiba como conceder papéis.gcloud services enable run.googleapis.com
logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com -
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: a seleção de um projeto não exige um papel específico do IAM. Você pode selecionar qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, você precisa do papel de criador de projetos
(
roles/resourcemanager.projectCreator), que contém aresourcemanager.projects.createpermissão. Saiba como conceder papéis.
-
Crie um Google Cloud projeto:
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o Google Cloud projeto que você está criando. -
Selecione o Google Cloud projeto que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do seu Google Cloud projeto.
-
Verifique se o faturamento está ativado para seu Google Cloud projeto.
Ative as APIs Cloud Run, Cloud Logging, Pub/Sub e Eventarc:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de Service Usage role (
roles/serviceusage.serviceUsageAdmin), que contém aserviceusage.services.enablepermissão. Saiba como conceder papéis.gcloud services enable run.googleapis.com
logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com - Atualize os componentes da CLI do Google Cloud:
gcloud components update
- Faça login usando sua conta:
gcloud auth login
- Defina as variáveis de configuração usadas neste guia de início rápido:
gcloud config set run/region us-central1 gcloud config set run/platform managed gcloud config set eventarc/location us-central1
-
Se você for o criador do projeto, receberá o papel de proprietário básico (
roles/owner). Por padrão, esse papel do Identity and Access Management (IAM) inclui as permissões necessárias para acesso total à maioria dos Google Cloud recursos, e você pode pular esta etapa.Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço (para aplicativos e cargas de trabalho de computação). Para mais informações, consulte a página Papéis e permissões do destino do evento.
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) -
Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin)
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 por meio de papéis personalizados ou de outros papéis predefinidos.
-
Administrador do Cloud Run (
- Se você ativou o agente de serviço do Cloud Pub/Sub até 8 de abril
de 2021, para oferecer compatibilidade com solicitações push autenticadas do Pub/Sub, conceda
o papel de Criador de token da conta de serviço (
roles/iam.serviceAccountTokenCreator) ao agente de serviço. Caso contrário, esse papel é concedido por padrão:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Substitua PROJECT_NUMBER pelo seu Google Cloud
número do projeto. Encontre o número do projeto na página
Boas-vindas
do Google Cloud console ou executando o seguinte comando:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Implantar um receptor de eventos no Cloud Run
Implante um serviço do Cloud Run que receberá e registrará eventos usando
uma imagem pré-criada, us-docker.pkg.dev/cloudrun/container/hello:
gcloud run deploy helloworld-events-pubsub-quickstart \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--allow-unauthenticated
Quando o URL do serviço for exibido, a implantação estará concluída.
Criar um gatilho do Eventarc
O gatilho de eventos envia mensagens para o serviço de receptor de eventos implantado no Cloud Run quando uma mensagem é publicada no tópico do Pub/Sub.
Crie um gatilho para detectar mensagens do Pub/Sub:
Novo tópico pub/sub
gcloud eventarc triggers create events-pubsub-trigger \ --destination-run-service=helloworld-events-pubsub-quickstart \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"Isso cria um novo tópico Pub/Sub e um gatilho para ele chamado
events-pubsub-trigger.Tópico do Pub/Sub atual
gcloud eventarc triggers create events-pubsub-trigger \ --destination-run-service=helloworld-events-pubsub-quickstart \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_IDSubstitua:
PROJECT_ID: o ID do seu Google Cloud projetoTOPIC_ID: o ID do tópico do Pub/Sub atual
Isso cria um gatilho chamado
events-pubsub-triggerpara o tópico atual do Pub/Sub.Ao criar um gatilho do Eventarc pela primeira vez em um Google Cloud projeto, pode haver um atraso no provisionamento do agente de serviço do Eventarc. Esse problema geralmente pode ser resolvido ao tentar criar o acionador novamente. Para mais informações, consulte Erros de permissão negada.
Confirme se o gatilho foi criado:
gcloud eventarc triggers list --location=us-central1O
events-pubsub-triggerestá listado com um destino que é o serviço do Cloud Run,helloworld-events-pubsub-quickstart.
Gerar e visualizar um evento de tópico do Pub/Sub.
É possível gerar um evento do Eventarc publicando uma mensagem em um tópico do Pub/Sub.
Encontre e defina o tópico do Pub/Sub como uma variável de ambiente:
export RUN_TOPIC=$(gcloud eventarc triggers describe events-pubsub-trigger \ --format='value(transport.pubsub.topic)')Publique uma mensagem para o tópico do Pub/Sub a fim de gerar um evento:
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"O evento é encaminhado ao serviço do Cloud Run, que registra a mensagem do evento.
Para visualizar as entradas de registro relacionadas a eventos criadas pelo serviço, execute o seguinte comando:
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!'
Parabéns! Você implantou com sucesso um serviço de receptor de eventos no Cloud Run, criou um gatilho do Eventarc, gerou um evento do Pub/Sub e o visualizou nos registros do Cloud Run.
Limpar
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados.
Você pode:
Excluir o gatilho do Eventarc.
Isso também exclui o tópico associado do Pub/Sub.
Como alternativa, você pode excluir seu Google Cloud projeto para evitar cobranças. A exclusão do seu Google Cloud projeto interrompe o faturamento de todos os recursos usados nele.
Excluir um Google Cloud projeto:
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.