Implementar no Cloud Run através do Cloud Build

Esta página explica como implementar automaticamente serviços do Cloud Run através do Cloud Build. Se for um utilizador recente do Cloud Build, leia os inícios rápidos e a vista geral da configuração de compilação primeiro.

O Cloud Run permite-lhe executar imagens sem estado num ambiente sem servidor. Com o Cloud Build, pode implementar imagens do Artifact Registry no Cloud Run. Pode implementar uma imagem existente, criar e implementar uma imagem ou automatizar a implementação.

Antes de começar

  • Enable the Cloud Build, Cloud Run, Artifact Registry, and Resource Manager APIs.

    Enable the APIs

Autorizações de gestão de identidade e de acesso necessárias

Para receber as autorizações de que precisa para implementar no Cloud Run através do Cloud Build, peça ao seu administrador que lhe conceda as seguintes funções de IAM na conta de serviço predefinida do Cloud Build:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Criar e implementar uma imagem

O Cloud Build permite-lhe criar uma imagem, armazená-la no Artifact Registry e, em seguida, implementá-la no Cloud Run.

Para criar e implementar uma imagem:

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

  2. No ficheiro de configuração de compilação, adicione docker passos de compilação para compilar a imagem e enviá-la para o Artifact Registry e, em seguida, adicione um passo de compilação gcloud para invocar o comando gcloud run deploy para implementar 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'
    

    Onde:

    • REPOSITORY é o nome do repositório do Artifact Registry a partir do qual implementa a sua imagem.
    • LOCATION é a localização do seu repositório do Artifact Registry, como us-east1.
    • PROJECT_ID é o ID do Google Cloud projeto onde 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 está a implementar.
    • IMAGE é o nome da sua imagem no Artifact Registry.
  3. Navegue até ao diretório raiz do projeto e execute o seguinte comando, em que LOCATION é uma das regiões de compilação suportadas para executar a compilação:

     gcloud builds submit --region=LOCATION
    

Após a conclusão com êxito, é apresentada uma mensagem de êxito juntamente com o URL do serviço implementado.

Implementação contínua

Pode automatizar a implementação do seu software no Cloud Run através da criação de acionadores do Cloud Build. Pode configurar os acionadores para criar e implementar imagens sempre que atualizar o código fonte.

Para automatizar a implementação:

  1. Na raiz do repositório, adicione um ficheiro de configuração denominado cloudbuild.yaml com passos para criar a imagem, enviar a imagem para o Artifact Registry e, em seguida, invocar o comando gcloud 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'
    

    Onde:

    • REPOSITORY é o nome do repositório do Artifact Registry a partir do qual implementa a sua imagem.
    • LOCATION é a localização do seu repositório do Artifact Registry, como us-east1.
    • PROJECT_ID é o ID do Google Cloud projeto onde 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 está a implementar.
    • IMAGE é o nome da sua imagem no Artifact Registry.

    A variável de substituição $COMMIT_SHA é preenchida pelo Cloud Build quando acionada a partir de um repositório Git.

  2. Crie um acionador de compilação com o ficheiro de configuração criado no passo anterior:

    1. Abra a página Acionadores:

      Aceda à página Acionadores

    2. Clique em Criar acionador.

    3. No campo Nome, introduza um nome para o acionador.

    4. Em Região, selecione a região para o acionador.

    5. Em Evento, selecione o evento do repositório para iniciar o acionador.

    6. Em Origem, selecione o seu repositório e o nome da ramificação ou da etiqueta que vai iniciar o acionador. Para mais informações sobre como especificar que ramificações devem ser criadas automaticamente, consulte o artigo Criar um acionador de compilação.

    7. Em Configuração, selecione Ficheiro de configuração do Cloud Build (YAML ou JSON).

    8. No campo Localização do ficheiro de configuração do Cloud Build, escreva cloudbuild.yaml após /.

    9. Clique em Criar para guardar o acionador de compilação.

    Agora, quando envia novo código para o seu repositório, o Cloud Build invoca uma compilação e implementa o serviço no Cloud Run.

Para mais informações sobre como criar acionadores do Cloud Build, consulte o artigo Criar e gerir acionadores de compilação.

Usar autorizações de IAM mínimas

Quando uma imagem é implementada num serviço do Cloud Run, a imagem é executada com a identidade da conta de serviço de tempo de execução do serviço do Cloud Run. Uma vez que o Cloud Build pode implementar novas imagens automaticamente, o Cloud Build tem de poder agir como a conta de serviço de tempo de execução do seu serviço do Cloud Run.

Para conceder acesso limitado ao Cloud Build para implementação num serviço do Cloud Run, faça o seguinte:

Consola

  1. Aceda à página Contas de serviço da Google Cloud consola:

    Aceda a Contas de serviço

  2. Clique no endereço de email da conta de serviço de tempo de execução do seu serviço do Cloud Run (por predefinição, é PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  3. Clique no separador Autorizações.

  4. Clique em Conceder acesso.

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

  6. No menu pendente Selecionar uma função, selecione a função Contas de serviço > Utilizador da conta de serviço.

  7. Clique em Guardar.

gcloud

Use o comando gcloud iam service-accounts add-iam-policy-binding, em que PROJECT_NUMBER é o ID numérico do seu 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 seu projeto.

Se usar 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 as autorizações de implementação para mais informações.

Exemplos de código

Seguem-se alguns repositórios de exemplo, cada um dos quais contém uma aplicação de exemplo e um ficheiro de configuração de compilação para implementar a aplicação no Cloud Run:

  • deploy-prebuilt: Um exemplo de código que mostra como implementar uma imagem pré-criada no Cloud Run.
  • run-example-builddeploy: um exemplo de código que mostra como compilar e implementar uma imagem no Cloud Run.

O que se segue?