O Cloud Run permite executar imagens sem estado em um ambiente sem servidor. Com o Cloud Build, é possível implantar imagens do Container Registry (descontinuado) e do Artifact Registry no Cloud Run. É possível implantar uma imagem existente, criar e implantar uma imagem ou automatizar a implantação.
Antes de começar
-
Enable the Cloud Build, Cloud Run, Container Registry, and Resource Manager APIs.
Prepare o código-fonte do aplicativo. O código-fonte precisa ser armazenado em um repositório, como o Cloud Source Repositories, o GitHub ou o Bitbucket.
Para executar os comandos
gcloud
nesta página, instale a CLI do Google Cloud.Se você estiver usando o VPC Service Controls, configure um pool particular no perímetro do VPC Service Controls. Também é necessário configurar o Cloud Run para o VPC Service Controls.
Permissões de gerenciamento de identidade e acesso obrigatórias
Para receber as permissões necessárias para implantar no Cloud Run usando o Cloud Build, peça ao administrador para conceder a você os seguintes papéis do IAM na conta de serviço padrão do Cloud Build:
-
Desenvolvedor do Cloud Run (
roles/run.developer
) -
Gravador de registros (
roles/logging.logWriter
) -
Gravador do Artifact Registry (
roles/artifactregistry.writer
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
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.
Como criar e implantar uma imagem
O Cloud Build permite criar uma imagem, armazená-la no Artifact Registry e implantá-la no Cloud Run.
Para criar e implantar uma imagem:
No diretório raiz do projeto, crie um arquivo de configuração chamado
cloudbuild.yaml
.No arquivo de configuração de build, adicione etapas de build do
docker
para criar a imagem e envie-a ao Artifact Registry. Em seguida, adicione uma etapa de build dogcloud
para invocar o comandogcloud run deploy
e implantar a imagem no Cloud Run:steps: # Build the image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.'] # Push the image to Artifact Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'] # Deploy image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION'] images: - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
Em que:
REPOSITORY
é o nome do repositório do Artifact Registry de onde você implanta a imagem.LOCATION
é o local do repositório do Artifact Registry, comous-east1
.PROJECT_ID
é o ID do projeto Google Cloud em que a imagem está armazenada.SERVICE_NAME
é o nome do serviço do Cloud Run.SERVICE_REGION
é a região do serviço do Cloud Run que você está implantando.IMAGE
é o nome da imagem no Artifact Registry.
Navegue até o diretório raiz do projeto e execute o comando abaixo, em que
LOCATION
é uma das regiões de build com suporte para executar o build:gcloud builds submit --region=LOCATION
Após a conclusão, uma mensagem de sucesso é exibida com o URL do serviço implantado.
Implantação contínua
É possível automatizar a implantação do software no Cloud Run criando gatilhos do Cloud Build. Configure os acionadores para criar e implantar imagens sempre que atualizar o código-fonte.
Para automatizar a implantação:
Na raiz do repositório, adicione um arquivo de configuração chamado
cloudbuild.yaml
com etapas para criar a imagem, enviá-la ao Container Registry e invocar o comandogcloud run deploy
:steps: # Build the image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.'] # Push the image to Artifact Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'] # Deploy image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: - 'run' - 'deploy' - 'SERVICE_NAME' - '--image' - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA' - 'region' - 'SERVICE_REGION' images: - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
Em que:
REPOSITORY
é o nome do repositório do Artifact Registry de onde você implanta a imagem.LOCATION
é o local do repositório do Artifact Registry, comous-east1
.PROJECT_ID
é o ID do projeto Google Cloud em que a imagem está armazenada.SERVICE_NAME
é o nome do serviço do Cloud Run.SERVICE_REGION
é a região do serviço do Cloud Run que você está implantando.IMAGE
é o nome da imagem no Artifact Registry.
A variável de substituição
$COMMIT_SHA
é preenchida pelo Cloud Build quando acionada em um repositório Git.Crie um acionador de build com o arquivo de configuração criado na etapa anterior:
Acesse a página Gatilhos:
Clique em Criar gatilho.
No campo Nome, insira um nome para o gatilho.
Em Região, selecione a região do acionador.
Em Evento, selecione o evento do repositório para iniciar o gatilho.
Em Origem, selecione o repositório e o nome da ramificação ou da tag que iniciará o gatilho. Para mais informações sobre como especificar quais ramificações precisam ser criadas automaticamente, consulte Como criar um gatilho de compilação.
Em Configuração, selecione Arquivo de configuração do Cloud Build (YAML ou JSON).
No campo local do arquivo de configuração do Cloud Build, digite
cloudbuild.yaml
depois do/
.Clique em Criar para salvar o gatilho de compilação.
Agora, quando você envia um novo código para o repositório, o Cloud Build invocou um build e implantou o serviço no Cloud Run.
Para mais informações sobre como criar gatilhos do Cloud Build, consulte Como criar e gerenciar gatilhos de build.
Como usar permissões mínimas do IAM
Quando uma imagem é implantada em um serviço do Cloud Run, ela é executada usando a identidade da conta de serviço do ambiente de execução do serviço do Cloud Run. Como o Cloud Build pode implantar novas imagens automaticamente, ele precisa ser capaz de atuar como a conta de serviço do ambiente de execução do seu serviço do Cloud Run.
Para conceder acesso limitado ao Cloud Build para implantar em um serviço do Cloud Run, faça o seguinte:
Console
Acesse a página Contas de serviço no console do Google Cloud:
Clique no endereço de e-mail da conta de serviço do ambiente de execução do serviço do Cloud Run (por padrão, é
PROJECT_NUMBER-compute@developer.gserviceaccount.com
).Clique na guia Permissões.
Clique em
CONCEDER ACESSO.Insira a conta de serviço do Cloud Build (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
)No menu suspenso Selecionar um papel, selecione o papel Contas de serviço > Usuário da conta de serviço.
Clique em Salvar.
gcloud
Use o comando gcloud iam service-accounts add-iam-policy-binding
, em que
PROJECT_NUMBER
é o ID numérico do projeto:
gcloud iam service-accounts add-iam-policy-binding \ PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"
Substitua PROJECT_NUMBER pelo ID numérico do projeto.
Se você usa o Cloud Run com uma
identidade de serviço personalizada,
substitua
PROJECT_NUMBER-compute@developer.gserviceaccount.com
pelo endereço da sua conta de serviço.
Consulte Permissões de implantação para mais informações.
Exemplos de código
Veja alguns repositórios de amostra, cada um com um aplicativo de amostra e um arquivo de configuração de build para implantar o aplicativo no Cloud Run:
- deploy-prebuilt: um exemplo de código que mostra como implantar uma imagem pré-criada no Cloud Run.
- run-example-builddeploy: um exemplo de código que mostra como criar e implantar uma imagem no Cloud Run.
A seguir
- Saiba como usar o Cloud Deploy para implantar no Cloud Run.
- Saiba como implantar no GKE.
- Saiba como implantar no Cloud Run functions.
- Saiba como implantar no App Engine.
- Saiba como implantar no Firebase.
- Saiba como realizar implantações azul-verde no Compute Engine.
- Saiba como resolver erros de build.