Este tutorial mostra como gravar, implantar e chamar um serviço do Cloud Run a partir de uma assinatura de push do Pub/Sub.
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 Google Cloud
produtos usados pelo serviço do Cloud Run.
O uso de produtos do Google Cloud 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)
- europe-west12(Turim)
- europe-west2(Londres, Reino Unido)- Baixo CO2 
- europe-west3(Frankfurt, Alemanha)
- 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 visualizar a região no painel do Cloud Run no console doGoogle 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 com a Google Cloud região 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 seu 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 - 200ou- 204, confirmam o processamento completo da mensagem do Pub/Sub. Códigos de erro, como HTTP- 400ou- 500, indicam que a mensagem será repetida, conforme descrito no guia Como receber mensagens usando push.
- Um - Dockerfileque define o ambiente operacional do serviço. O conteúdo do- Dockerfilevaria 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.jsgcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub - PROJECT_ID com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION com a Google Cloud região 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. Pythongcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub - PROJECT_ID com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION com a Google Cloud região 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. Gogcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub - PROJECT_ID com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION com a Google Cloud região 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.
               mvn compile jib:build -D image=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub - PROJECT_ID com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION com a Google Cloud região 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#gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub - PROJECT_ID com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION com a Google Cloud região 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: gcloud run deploy pubsub-tutorial --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub --no-allow-unauthenticated - PROJECT_ID com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION com a Google Cloud região 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-unauthenticatedrestringe 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. 
 TerraformPara criar um serviço do Cloud Run, adicione o seguinte ao arquivo .tfexistente.resource "google_project_service" "cloudrun_api" { service = "run.googleapis.com" disable_on_destroy = false } resource "google_cloud_run_v2_service" "default" { name = "pubsub-tutorial" location = "REGION" template { containers { image = "IMAGE_URL" } } depends_on = [google_project_service.cloudrun_api] } -  IMAGE_URL com o URL da imagem: REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- REGION com a Google Cloud região a ser usada para o repositório do Artifact Registry.
 
- 
                  
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-invokerou substituir por um nome exclusivo no seu 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 403nos 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 com seu Google Cloud ID do projeto.
- 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 console doGoogle 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 com seu Google Cloud ID do projeto.
 - A sinalização - --push-auth-service-accountativa 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!".