Neste tutorial simples, demonstramos como escrever, implantar e acionar uma função do Cloud Run orientada a eventos com um gatilho do Pub/Sub.
Se você é novo no Pub/Sub e quer saber mais, consulte a documentação do Pub/Sub, especialmente gerenciamento de tópicos e assinaturas. Consulte Acionadores do Pub/Sub para uma visão geral de como trabalhar com tópicos e assinaturas do Pub/Sub nas funções do Cloud Run.
Se você estiver procurando exemplos de código para usar o Pub/Sub em si, acesse o navegador de exemplo.
Objetivos
- Escrever e implantar uma função do Cloud Run orientada a eventos.
- Acione a função publicando uma mensagem em um tópico Pub/Sub.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
- Pub/Sub
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- 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.
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions and Cloud Pub/Sub APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions and Cloud Pub/Sub APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init - Prepare seu ambiente de desenvolvimento.
Se a gcloud CLI já estiver instalada, atualize-a executando o seguinte comando:
gcloud components update
Como preparar o aplicativo
Clone o repositório do app de amostra na máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Mude para o diretório que contém o exemplo de código das funções do Cloud Run para acessar o Pub/Sub:
Node.js
cd nodejs-docs-samples/functions/helloworld/
Python
cd python-docs-samples/functions/helloworld/
Go
cd golang-samples/functions/helloworld/
Java
cd java-docs-samples/functions/helloworld/hello-pubsub/
Ruby
cd ruby-docs-samples/functions/helloworld/pubsub/
Confira o código de amostra:
Node.js
Python
Go
Java
Ruby
Como implantar a função
Para implantar a função com um gatilho do Pub/Sub, execute o seguinte comando no diretório que contém o código de amostra (ou, no caso de Java, o arquivo pom.xml):
Node.js
gcloud functions deploy helloPubSub \ --runtime nodejs22 \
--trigger-topic YOUR_TOPIC_NAME
Use a flag --runtime para especificar o ID do ambiente de execução de uma versão do Node.js compatível a fim de executar a função.
Python
gcloud functions deploy hello_pubsub \ --runtime python312 \
--trigger-topic YOUR_TOPIC_NAME
Use a flag --runtime para especificar o ID do ambiente de execução de uma versão compatível do Python a fim de executar a função.
Go
gcloud functions deploy HelloPubSub \ --runtime go121 \
--trigger-topic YOUR_TOPIC_NAME
Use a flag --runtime para especificar o ID do ambiente de execução de uma versão do Go compatível a fim de executar a função.
Java
gcloud functions deploy java-pubsub-function \ --entry-point functions.HelloPubSub \ --runtime java17 \ --memory 512MB \
--trigger-topic YOUR_TOPIC_NAME
Use a flag --runtime para especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.
Ruby
gcloud functions deploy hello_pubsub --runtime ruby33 \
--trigger-topic YOUR_TOPIC_NAME
Use a flag --runtime para especificar o ID do ambiente de execução de uma versão compatível do Ruby a fim de executar a função.
em que YOUR_TOPIC_NAME é o nome do tópico do Pub/Sub
para o qual a função será inscrita.
Se YOUR_TOPIC_NAME ainda não existir, este comando
o criará para você. Também é possível criar um tópico antes de executar o comando deploy usando o console doGoogle Cloud ou o seguinte comando gcloud:
gcloud pubsub topics create YOUR_TOPIC_NAMEComo acionar a função
Publique uma mensagem no seu tópico do Pub/Sub. Neste exemplo, a mensagem é um nome que a função incluirá em uma saudação:
gcloud pubsub topics publish
YOUR_TOPIC_NAME--messageYOUR_NAMESubstitua
YOUR_TOPIC_NAMEpelo nome do seu tópico do Pub/Sub eYOUR_NAMEpor uma string arbitrária.Verifique os registros para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 50
Você também pode publicar uma mensagem em um tópico Pub/Sub de dentro de uma função.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- No console 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.
Como excluir a função
A exclusão de funções do Cloud Run não remove nenhum recurso armazenado no Cloud Storage.
Para excluir a função criada neste tutorial, execute o seguinte comando:
Node.js
gcloud functions delete helloPubSub
Python
gcloud functions delete hello_pubsub
Go
gcloud functions delete HelloPubSub
Java
gcloud functions delete java-pubsub-function
Ruby
gcloud functions delete hello_pubsub
Também é possível excluir funções do Cloud Run pelo consoleGoogle Cloud .