Este tutorial mostra como gravar, implantar e chamar um serviço do Cloud Run a partir de uma assinatura de push do Pub/Sub.
Objetivos
- Escrever, criar e implantar um serviço no Cloud Run
- Chame o serviço publicando uma mensagem em um tópico do Pub/Sub.
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
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Pub/Sub and Cloud Run APIs.
- Instale e inicialize a CLI gcloud.
- Atualize os componentes:
gcloud components update
Funções exigidas
Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:
-
Editor do Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador do Cloud Run (
roles/run.admin
) -
Criar contas de serviço (
roles/iam.serviceAccountCreator
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) -
Editor do Pub/Sub (
roles/pubsub.editor
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Administrador de armazenamento (
roles/storage.admin
)
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.
Configurar os padrões da gcloud
Para configurar a gcloud com os padrões do serviço do Cloud Run, realize as etapas a seguir:
Defina seu projeto padrão:
gcloud config set project PROJECT_ID
Substitua PROJECT_ID pelo nome do projeto que você criou para este tutorial.
Configure a gcloud para a região escolhida:
gcloud config set run/region REGION
Substitua REGION pela região compatível do Cloud Run.
Locais do Cloud Run
O Cloud Run é regional, o que significa que a infraestrutura que executa seus serviços do Cloud Run está localizada em uma região específica e é gerenciada pelo Google para estar disponível de maneira redundante em todas as zonas da região.
Atender aos seus requisitos de latência, disponibilidade ou durabilidade são os principais fatores para selecionar a região em que seus serviços do Cloud Run são executados.
Geralmente, é possível selecionar a região mais próxima de seus usuários, mas considere
a localização dos outros produtos Google Cloud usados pelo serviço do Cloud Run.
O uso de Google Cloud produtos em vários locais pode afetar
a latência e o custo do serviço.
O Cloud Run está disponível nas regiões a seguir:
Sujeitas aos preços do nível 1
asia-east1
(Taiwan)asia-northeast1
(Tóquio)asia-northeast2
(Osaka)asia-south1
(Mumbai, Índia)europe-north1
(Finlândia)Baixo CO2
europe-north2
(Estocolmo)Baixo CO2
europe-southwest1
(Madri)Baixo CO2
europe-west1
(Bélgica)Baixo CO2
europe-west4
(Países Baixos)Baixo CO2
europe-west8
(Milão)europe-west9
(Paris)Baixo CO2
me-west1
(Tel Aviv)northamerica-south1
(México)us-central1
(Iowa)Baixo CO2
us-east1
(Carolina do Sul)us-east4
(Norte da Virgínia)us-east5
(Columbus)us-south1
(Dallas)Baixo CO2
us-west1
(Oregon)Baixo CO2
Sujeitas aos preços do nível 2
africa-south1
(Johannesburgo)asia-east2
(Hong Kong)asia-northeast3
(Seul, Coreia do Sul)asia-southeast1
(Singapura)asia-southeast2
(Jacarta)asia-south2
(Déli, Índia)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Varsóvia, Polônia)europe-west10
(Berlim)Baixo CO2
europe-west12
(Turim)europe-west2
(Londres, Reino Unido)Baixo CO2
europe-west3
(Frankfurt, Alemanha)Baixo CO2
europe-west6
(Zurique, Suíça)Baixo CO2
me-central1
(Doha)me-central2
(Damã)northamerica-northeast1
(Montreal)Baixo CO2
northamerica-northeast2
(Toronto)Baixo CO2
southamerica-east1
(São Paulo, Brasil)Baixo CO2
southamerica-west1
(Santiago, Chile)Baixo CO2
us-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Se você já criou um serviço do Cloud Run, é possível conferir a região no painel do Cloud Run no consoleGoogle Cloud .
Criar um repositório padrão do Artifact Registry
Crie um repositório padrão do Artifact Registry para armazenar a imagem do contêiner:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=REGION
Substitua:
- REPOSITORY por um nome exclusivo para o repositório.
- REGION pela região Google Cloud a ser usada para o repositório do Artifact Registry.
Criar um tópico do Pub/Sub
O serviço de amostra é acionado por mensagens publicadas em um tópico do Pub/Sub. Portanto, é necessário criar um tópico no Pub/Sub.
gcloud
Para criar um novo tópico do Pub/Sub, use o comando:
gcloud pubsub topics create myRunTopic
É possível usar myRunTopic ou substituir por um nome de tópico exclusivo no projeto Google Cloud .
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Para criar um tópico do Pub/Sub, adicione o seguinte ao arquivo main.tf
existente:
É possível usar um nome de tópico exclusivo no seu projeto do Cloud.
Recuperar a amostra de código
Para recuperar o exemplo de código para uso, siga estas etapas:
Clone o repositório do aplicativo 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.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-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 código de amostra do Cloud Run:
Node.js
cd nodejs-docs-samples/run/pubsub/
Python
cd python-docs-samples/run/pubsub/
Go
cd golang-samples/run/pubsub/
Java
cd java-docs-samples/run/pubsub/
C#
cd dotnet-docs-samples/run/Run.Samples.Pubsub.MinimalApi/
Revisar o código
O código deste tutorial consiste nisto:
Um servidor que processa solicitações recebidas.
Node.js
Para que a facilidade no teste do serviço do Node.js seja mantida, a configuração do servidor é separada da inicialização dele.
O servidor da Web Node.js está configurado em
app.js
.O servidor da Web é iniciado em
index.js
:Python
Go
Java
C#
Um gerenciador que processa a mensagem do Pub/Sub e registra uma saudação.
Node.js
Python
Go
Java
C#
É necessário codificar o serviço para retornar um código de resposta HTTP preciso. Códigos de êxito, como HTTP
200
ou204
, confirmam o processamento completo da mensagem do Pub/Sub. Códigos de erro, como HTTP400
ou500
, indicam que a mensagem será repetida, conforme descrito no guia Como receber mensagens usando push.Um
Dockerfile
que define o ambiente operacional do serviço. O conteúdo doDockerfile
varia de acordo com o idioma.Node.js
Python
Go
Java
Esta amostra usa o Jib (em inglês) para criar imagens do Docker usando ferramentas comuns do Java. O Jib otimiza builds de contêiner sem a necessidade de um Dockerfile ou de ter o Docker (em inglês) instalado. Saiba mais sobre como criar contêineres Java com o Jib.
C#
Para saber detalhes sobre como autenticar a origem das solicitações do Pub/Sub, consulte Integrar com o Pub/Sub.
Enviar o código
O código de envio consiste em três etapas: criar uma imagem de contêiner com o Cloud Build, fazer upload da imagem de contêiner no Container Artifact e implantar a imagem de contêiner no Cloud Run.
Para enviar o código, siga estas etapas:
-
Compile seu contêiner e publique no Artifact Registry:
Node.js
Substituir:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID pelo ID do projeto Google Cloud .
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região Google Cloud a ser usada para o repositório do Artifact Registry.
pubsub
é o nome da imagem.Após a conclusão, você verá uma mensagem de "SUCESSO" contendo o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Artifact Registry e poderá ser reutilizada se necessário.
Python
Substituir:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID pelo ID do projeto Google Cloud .
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região Google Cloud a ser usada para o repositório do Artifact Registry.
pubsub
é o nome da imagem.Após a conclusão, você verá uma mensagem de "SUCESSO" contendo o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Artifact Registry e poderá ser reutilizada se necessário.
Go
Substituir:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID pelo ID do projeto Google Cloud .
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região Google Cloud a ser usada para o repositório do Artifact Registry.
pubsub
é o nome da imagem.Após a conclusão, você verá uma mensagem de "SUCESSO" contendo o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Artifact Registry e poderá ser reutilizada se necessário.
Java
-
Use o auxiliar de credencial do gcloud CLI para autorizar o Docker a enviar por push ao Artifact Registry.
gcloud auth configure-docker
-
Use o plug-in do Maven do Jib para criar e enviar por push o contêiner ao Artifact Registry.
Substituir:mvn compile jib:build -D image=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID pelo ID do projeto Google Cloud .
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região Google Cloud a ser usada para o repositório do Artifact Registry.
pubsub
é o nome da imagem.Após a conclusão, você verá uma mensagem "BUILD SUCCESS". A imagem é armazenada no Artifact Registry e poderá ser reutilizada se necessário.
C#
Substituir:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID pelo ID do projeto Google Cloud .
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região Google Cloud a ser usada para o repositório do Artifact Registry.
pubsub
é o nome da imagem.Após a conclusão, você verá uma mensagem de "SUCESSO" contendo o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Artifact Registry e poderá ser reutilizada se necessário.
-
Implante sua aplicação:
Linha de comando
-
Execute o comando a seguir para implantar o app:
Substituir:gcloud run deploy pubsub-tutorial --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub --no-allow-unauthenticated
- PROJECT_ID pelo ID do projeto Google Cloud .
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região Google Cloud a ser usada para o repositório do Artifact Registry.
pubsub
é o nome da imagem epubsub-tutorial
é o nome do serviço. A imagem do contêiner é implantada no serviço e na região que você configurou anteriormente em Como configurar o gcloudA sinalização
--no-allow-unauthenticated
restringe o acesso não autenticado ao serviço. Mantendo o serviço particular, é possível contar com a integração automática do Pub/Sub no Cloud Run para autenticar as solicitações. Consulte Integrar com Pub/Sub para mais detalhes sobre como isso é configurado. Para mais detalhes sobre autenticação baseada em Identity and Access Management (IAM), consulte Como gerenciar o acesso usando o IAM.Aguarde até que a implantação esteja concluída. Isso pode levar cerca de 30 segundos. Em caso de sucesso, a linha de comando exibe o URL de serviço. Esse URL é usado para configurar uma assinatura do Pub/Sub.
-
Se você quer implantar uma atualização de código no serviço, repita as etapas anteriores. Cada implantação em um serviço cria uma nova revisão e inicia automaticamente o tráfego de serviço quando estiver pronto.
Terraform
Para criar um serviço do Cloud Run, adicione o seguinte ao arquivo
.tf
existente.Substitua o valor de
image
pelo URL da imagem:REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
. -
Integrar com o Pub/Sub
Para integrar o serviço com o Pub/Sub:
gcloud
Crie ou selecione uma conta de serviço para representar a identidade da assinatura de Pub/Sub.
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
É possível usar
cloud-run-pubsub-invoker
ou substituir por um nome exclusivo no projeto Google Cloud .Crie uma assinatura do Pub/Sub com a conta de serviço:
Conceda permissão à conta de serviço do invocador para invocar seu serviço
pubsub-tutorial
:gcloud run services add-iam-policy-binding pubsub-tutorial \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Pode levar vários minutos para que as alterações do IAM sejam propagadas. Enquanto isso, talvez você veja erros
HTTP 403
nos registros de serviço.Permita que o Pub/Sub crie tokens de autenticação no seu projeto:
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_ID pelo ID do projeto Google Cloud .
- PROJECT_NUMBER pelo número do projeto Google Cloud .
O ID e o número do projeto estão listados no painel Informações do projeto no consoleGoogle Cloud do seu projeto.
Crie uma assinatura do Pub/Sub com a conta de serviço:
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
Substitua:
- myRunTopic pelo tópico que você criou anteriormente.
- SERVICE-URL pelo URL de HTTPS fornecido na implantação do serviço. Esse URL funciona mesmo se você também tiver adicionado um mapeamento de domínio.
- PROJECT_ID pelo ID do projeto Google Cloud .
A sinalização
--push-auth-service-account
ativa a funcionalidade de push do Pub/Sub para Autenticação e autorização.Seu domínio do serviço Cloud Run é registrado automaticamente para uso com assinaturas do Pub/Sub.
Somente para o Cloud Run, há uma verificação de autenticação integrada que verifica se o token é válido e uma autorização para verificar se a conta de serviço tem permissão para invocar o serviço do Cloud Run.
Seu serviço agora está totalmente integrado ao Pub/Sub.
Terraform
Crie ou selecione uma conta de serviço para representar a identidade da assinatura de Pub/Sub.
Crie uma assinatura do Pub/Sub com a conta de serviço:
Conceda permissão à conta de serviço do invocador para invocar seu serviço
pubsub-tutorial
:Permita que o Pub/Sub crie tokens de autenticação no seu projeto:
Crie uma assinatura do Pub/Sub com a conta de serviço:
Seu serviço agora está totalmente integrado ao Pub/Sub.
Faça um teste
Para testar a solução de ponta a ponta, siga estas etapas:
Para enviar uma mensagem do Pub/Sub para o tópico:
gcloud pubsub topics publish myRunTopic --message "Runner"
Também é possível publicar mensagens programaticamente em vez de usar a linha de comando, conforme mostrado neste tutorial. Para mais informações, consulte Como publicar mensagens.
Navegue até os registros de serviço:
- Acesse o console doGoogle Cloud .
- Clique no serviço
pubsub-tutorial
. Selecione a guia Registros.
Os registros podem demorar alguns instantes para aparecer. Se você não os vir imediatamente, verifique novamente após alguns instantes.
Procure a mensagem "Hello Runner!".
Limpar
Para ver mais detalhes sobre o caso de uso do Cloud Run com o Pub/Sub, pule a limpeza por enquanto e continue com o tutorial de processamento de imagens com o Cloud Run.
Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.
Como 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:
- 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.
Como excluir recursos do tutorial
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 consoleGoogle Cloud .
Remova a configuração da região padrão da gcloud que você adicionou durante a configuração do tutorial:
gcloud config unset run/region
Remova a configuração do projeto:
gcloud config unset project
Exclua outros Google Cloud recursos criados neste tutorial:
- Exclua o tópico Pub/Sub
myRunTopic
- Exclua a assinatura do Pub/Sub
myRunSubscription
. - Exclua a imagem do contêiner chamada
REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
do Artifact Registry. - Exclua a conta de serviço do invocador
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
.
- Exclua o tópico Pub/Sub
A seguir
- Consulte Como restringir a entrada para ver informações sobre como aumentar a segurança de produção usando controles de entrada internos para limitar a entrada.
- Expanda o serviço de amostra implantado neste tutorial para adicionar a funcionalidade de processamento de imagens que modifica as imagens enviadas ao Cloud Storage.
- Saiba mais sobre como os tópicos se encaixam na arquitetura do Pub/Sub e como gerenciar tópicos
- Saiba mais sobre assinaturas do Pub/Sub em Como gerenciar assinaturas.
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.