Como implantar no Cloud Run

Nesta página explicamos como implantar automaticamente os serviços do Cloud Run usando o Cloud Build. Se você não estiver familiarizado com o Cloud Build, leia os guias de início rápido e a visão geral da configuração de build primeiro.

O Cloud Run é uma plataforma de computação gerenciada com que é possível executar contêineres sem estado em um ambiente sem servidor. Com o Cloud Build, é possível implantar imagens de contêiner do Container Registry e do Artifact Registry no Cloud Run. É possível implantar uma imagem existente, criar e implantar uma imagem ou automatizar a implantação.

Para mais informações sobre o Cloud Run, leia a documentação do Cloud Run.

Antes de começar

  • Ative as APIs Cloud Build, Cloud Run, Container Registry, and Resource Manager.

    Ative as APIs

Permissões do IAM obrigatórias

Se a imagem estiver armazenada no mesmo projeto do Cloud em que você quer implantar ou se a imagem for pública no Container Registry, serão necessárias as seguintes permissões do IAM:

Gerenciamento total

Para implantar no Cloud Run (totalmente gerenciado), conceda os papéis "Administrador do Cloud Run" e "Usuário da conta de serviço" à conta de serviço do Cloud Build:

  1. Abra a página de configurações do Cloud Build no Console do Cloud:

    Acessar a página de configurações do Cloud Build

  2. No painel de permissões da conta de serviço, defina o status do papel Administrador do Cloud Run como ATIVADO:

    Captura de tela da página de permissões da conta de serviço

  3. No pop-up "Etapas adicionais", clique em CONCEDER ACESSO A TODAS AS CONTAS DE SERVIÇO.

Anthos no Google Cloud

Para implantar no Cloud Run para Anthos, conceda o papel "Desenvolvedor do Kubernetes Engine" à conta de serviço do Cloud Build:

  1. Abra a página de configurações do Cloud Build no Console do Cloud:

    Acessar a página de configurações do Cloud Build

  2. No painel de permissões da conta de serviço, defina o status do papel Desenvolvedor do Kubernetes Engine como ATIVADO:

    Captura de tela da página de permissões da conta de serviço

Se a imagem estiver armazenada em um projeto do Cloud diferente do que você quer implantar, será necessário ter outras permissões do IAM, conforme descrito em Como implantar imagens de outros projetos do GCP.

Como criar e implantar um contêiner

O Cloud Build permite que você crie a imagem de contêiner, armazene-a no Container Registry e implante a imagem no Cloud Run.

Para criar e implantar uma imagem de contêiner:

  1. No diretório raiz do projeto, crie um arquivo de configuração chamado cloudbuild.yaml.

  2. No arquivo de configuração de build, adicione etapas de build do docker para criar a imagem e enviá-la ao Container Registry e adicione uma etapa de build do gcloud para invocar o comando gcloud run deploy a fim de implantar a imagem no Cloud Run:

    Gerenciamento total

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'REGION', '--platform', 'managed']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Em que:

    • SERVICE-NAME é o nome do serviço do Cloud Run.
    • REGION é a região do serviço do Cloud Run em que você está implantando.
    • PROJECT_ID é o ID do projeto do Google Cloud em que a imagem está armazenada.
    • IMAGE é o nome da imagem no Container Registry.

    Anthos no Google Cloud

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--cluster', 'CLUSTER', '--cluster-location', 'CLUSTER_LOCATION', '--platform', 'gke']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Em que:

    • SERVICE-NAME é o nome do serviço do Cloud Run.
    • CLUSTER é o nome do cluster do Cloud Run para Anthos no Google Cloud.
    • CLUSTER_LOCATION é o local do cluster do Cloud Run para Anthos no Google Cloud.
    • PROJECT_ID é o ID do projeto do Google Cloud em que a imagem está armazenada.
    • IMAGE é o nome da imagem no Container Registry.
  3. Navegue até o diretório raiz do projeto e execute:

     gcloud builds submit
    

Após a conclusão, uma mensagem de sucesso é exibida junto com o URL do serviço implantado.

Implantação contínua

É possível automatizar a implantação do seu software no Cloud Run criando acionadores do Cloud Build. Configure os acionadores para criar e implantar imagens sempre que atualizar o código-fonte.

Para automatizar a implantação no Cloud Run:

  1. Na raiz do repositório, adicione um arquivo de configuração com etapas para criar a imagem e enviá-la ao Container Registry e invoque o comando gcloud run deploy:

    Gerenciamento total

     steps:
     # Build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # Push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--region'
       - 'REGION'
       - '--platform'
       - 'managed'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Em que:

    • SERVICE-NAME é o nome do serviço do Cloud Run.
    • REGION é a região do serviço do Cloud Run que você está implantando.

    Anthos no Google Cloud

     steps:
     # build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--cluster'
       - 'CLUSTER'
       - '--cluster-location'
       - 'CLUSTER_LOCATION'
       - '--platform'
       - 'gke'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Em que:

    • SERVICE-NAME é o nome do serviço do Cloud Run.
    • CLUSTER é o nome do cluster do Cloud Run para Anthos no Google Cloud.
    • CLUSTER_LOCATION é o local do cluster do Cloud Run para Anthos no Google Cloud.

    O uso da variável de substituição $COMMIT_SHA é preenchido pelo Cloud Build quando acionado a partir de um repositório git.

  2. Crie um gatilho de compilação com o arquivo de configuração criado na etapa anterior:

    1. Acesse a página Gatilhos:

      Acessar a página "Gatilhos"

    2. Clique em Criar gatilho.

    3. No campo Nome, insira um nome para o gatilho.

    4. Em Evento, selecione o evento do repositório para iniciar o gatilho.

    5. 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.

    6. Em Configuração da compilação, selecione arquivo de configuração do Cloud Build.

    7. No campo local do arquivo de configuração do Cloud Build, digite cloudbuild.yaml depois do /.

    8. Clique em Criar para salvar o gatilho de compilação.

  3. O processo foi concluído. De agora em diante, sempre que você enviar para seu repositório, uma compilação e uma implantação do serviço do Cloud Run serão chamadas automaticamente.

Sempre que enviar um novo código para seu repositório, você acionará automaticamente uma versão e implantará seu serviço do 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 um contêiner é implantado em um serviço do Cloud Run (totalmente gerenciado), ele é executado com a identidade da conta de serviço do ambiente de execução desse serviço do Cloud Run (totalmente gerenciado). Como o Cloud Build pode implantar novos contêineres automaticamente, ele precisa ser capaz de agir como a conta de serviço do ambiente de execução do serviço do Cloud Run (totalmente gerenciado).

Para conceder acesso limitado ao Cloud Build para implantar em um serviço do Cloud Run (totalmente gerenciado):

Console

  1. Acesse a página Contas de serviço no Console do Google Cloud:

    Acessar Contas de serviço

  2. Selecione a conta de serviço do ambiente de execução do serviço do Cloud Run (totalmente gerenciado). Por padrão, é PROJECT_NUMBER-compute@developer.gserviceaccount.com.

  3. Clique em Mostrar painel de informações no canto superior direito para mostrar a guia Permissões.

  4. Clique no botão Adicionar membro.

  5. Insira a conta de serviço do Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com)

  6. Na lista suspensa Selecionar um papel, selecione o papel Contas de serviço > Usuário da conta de serviço.

  7. Clique em Save.

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 código numérico do projeto.

Se estiver usando o Cloud Run (totalmente gerenciado) usando uma identidade de serviço personalizada, substitua PROJECT_NUMBER-compute@developer.gserviceaccount.com pelo endereço da 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:

A seguir