Visão geral do processo de build

Quando você implanta o código-fonte da função do Cloud Run, essa origem é armazenada em um bucket do Cloud Storage. Em seguida, o Cloud Build cria automaticamente seu código em uma imagem de contêiner e a envia para um registro de imagens. As funções do Cloud Run acessam essa imagem quando precisam gerar o contêiner para executar sua função.

O processo de criação da imagem é totalmente automático e você não precisa intervir nele. Todos os recursos usados no processo de compilação são executados no próprio projeto do usuário.

Executar o processo de compilação dentro do projeto significa que:

  • você tem acesso direto a todos os registros do build;

  • não há uma cota de tempo de compilação predefinida, embora o Cloud Build tenha uma cota de simultaneidade padrão própria;

  • É possível ver a imagem do contêiner atual e a imagem do contêiner implantada anteriormente, que são armazenadas no Artifact Registry.

  • O Cloud Storage é usado diretamente no projeto, e o diretório de código-fonte das funções é armazenado em um bucket dentro do projeto. Observações:

    • Se você estiver usando a criptografia padrão, esse bucket será chamado de gcf-sources-PROJECT_NUMBER-REGION.
    • Se você estiver protegendo seus dados com CMEK, o bucket será chamado de gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH.
    • O bucket não tem período de armazenamento.

Características do processo de compilação

O processo de compilação tem as seguintes características:

  • A API Cloud Build precisa estar ativada no projeto.

    Para ativar a API manualmente, clique no link acima, selecione seu projeto no menu suspenso e siga as instruções para ativar a interface.

  • Como todo o processo de compilação ocorre dentro do contexto do projeto, este está sujeito aos preços dos recursos incluídos:

    • Para preços do Cloud Build, consulte a página Preços. Esse processo usa o tamanho padrão da instância do Cloud Build, já que essas instâncias são pré-montadas e ficam disponíveis mais rapidamente. O Cloud Build oferece um nível gratuito: consulte o documento de preços para mais detalhes.

    • Para preços do Cloud Storage, consulte a página Preços. O Cloud Storage oferece um nível gratuito. Veja mais detalhes no documento de preços.

    • Para preços do Artifact Registry, consulte a página Preços.

    • Para preços do Container Registry (descontinuado), consulte a página Preços.

  • Como o processo de compilação está sujeito ao faturamento, o projeto precisa ter uma Conta de faturamento do Cloud anexada a ele.

Ver os registros de imagem do build

Um dos principais benefícios de ter o processo de imagem do build no projeto de usuário é o acesso aos registros do build. Use a CLI gcloud ou o console do Google Cloud para acessar os registros, que estão disponíveis no Cloud Logging.

gcloud

  1. Implante a função usando o comando gcloud functions deploy.

  2. O URL dos registros é mostrado como parte da resposta na janela do terminal. Exemplo:

    Deploying function (may take a while - up to 2 minutes)...⠹
    **For Cloud Build Stackdriver Logs**, visit:
    https://console.cloud.google.com/logs/viewer?project=&advancedFilter=resource.type%
    3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2-
    380d50d4f5e8%0AlogName%3Dprojects%2F%
    2Flogs%2Fcloudbuild
    Deploying function (may take a while - up to 2 minutes)...done.

Console do Google Cloud

  1. Na janela Visão geral das funções do Cloud Run, clique no nome da função que você está investigando.
  2. Clique na guia Details.
  3. No painel Informações gerais, clique no link Registro de criação de contêiner para abrir o painel Análise de registros.
  4. Clique em qualquer linha para ver os detalhes dessa entrada de registro do build. No caso de uma entrada de erro associada a um arquivo, esses detalhes contêm o nome, a linha e a coluna do arquivo.

Registro de imagens

As funções do Cloud Run usam o Artifact Registry para armazenar as imagens criadas com o código-fonte da função. As imagens são armazenadas em um repositório chamado REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts.

O Artifact Registry precisa estar no mesmo projeto que sua função. É possível criar ou atualizar uma função baseada no Artifact Registry da seguinte maneira:

gcloud

Em Artifact Registry gerenciado pelo cliente, execute o seguinte comando:

gcloud functions deploy --no-gen2 FUNCTION \
--docker-repository=REPOSITORY
[FLAGS...]

Substitua:

  • FUNCTION: o nome da função.
  • REPOSITORY: o nome do repositório do Artifact Registry totalmente qualificado, no seguinte formato: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

Para o Artifact Registry gerenciado pelo Google, use:

gcloud functions deploy --no-gen2 FUNCTION \
--docker-registry=artifact-registry
[FLAGS...]

Console do Google Cloud

  1. Acesse a página de funções do Cloud Run no console do Google Cloud:
    Acessar a página de funções do Cloud Run

  2. Clique no nome da função que você quer usar no Artifact Registry.

  3. Clique em Editar.

  4. Clique em Ambiente de execução, build... para expandir as opções de configuração avançada.

  5. Clique em Repositório de imagens e segurança na barra de menus para abrir a guia de segurança.

  6. Em Repositório de imagens, selecione uma das seguintes opções, dependendo do tipo de Artifact Registry que você está usando:

    • Artifact Registry gerenciado pelo cliente. Use essa opção se você tiver configurado seu próprio repositório do Docker.
    • Artifact Registry gerenciado pelo Google. Use esta opção se você quiser usar um repositório do Docker gerenciado pelo Google em vez de configurar seu próprio repositório.
  7. Em Artifact Registry gerenciado pelo cliente, use o menu suspenso Artifact registry para selecionar o repositório do Artifact Registry que você quer ou siga as instruções e crie um novo.

  8. Clique em Próxima.

  9. Clique em Implantar.

Para informações detalhadas sobre preços, consulte Preços das funções do Cloud Run.

Proteger o build com pools particulares

Para permitir que suas funções usem dependências (por exemplo, pacotes npm), o Cloud Build tem, por padrão, acesso ilimitado à Internet durante o processo de criação. Se você tiver configurado um perímetro de VPC Service Controls (VPC SC) e quiser limitar o acesso da compilação apenas às dependências armazenadas dentro do perímetro, poderá usar o recurso Pools de workers particulares do Cloud Build.

Em geral, siga estas etapas para configurar seu pool privado:

  1. Crie seu pool de workers privados. Consulte Como criar e gerenciar pools particulares.
  2. Configure o perímetro do VPC Service Controls. Consulte Como usar o VPC Service Controls.

  3. Se o pool de workers privados estiver em um projeto diferente da função, você precisará conceder a conta de serviço Agente de serviço (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) das funções do Cloud Run cloudbuild.workerPoolUser para que o serviço do Cloud Build possa acessar o pool de workers.

    gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \
        --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
        --role roles/cloudbuild.workerPoolUser

    em que FUNCTION_PROJECT_NUMBER é o número do projeto em que a função é executada e PRIVATE_POOL_PROJECT_ID é o id do projeto em que o worker pool está localizado. Consulte Como executar versões em um pool particular para mais informações.

  4. Implante a função para criar usando um pool particular:

gcloud

gcloud functions deploy FUNCTION_NAME --no-gen2\
  --runtime RUNTIME \
  --build-worker-pool PRIVATE_POOL_NAME
  [FLAGS...]

em que FUNCTION_NAME é o nome da função, RUNTIME é o ambiente de execução que você está usando e PRIVATE_POOL_NAME é o nome do seu pool.

Para interromper o uso de um determinado pool particular e usar o pool padrão do Cloud Build, use a sinalização --clear-build-worker-pool ao reimplantar.

gcloud functions deploy FUNCTION_NAME --no-gen2 \
  --runtime RUNTIME \
  --clear-build-worker-pool
  [FLAGS...]

em que FUNCTION_NAME é o nome da função e RUNTIME é o ambiente de execução que você está usando.

Console do Google Cloud

  1. Na página Visão geral das funções do Cloud Run, selecione Criar função.

  2. Na seção Ambiente de execução, build... clique na guia Build e insira o nome completo do recurso do pool particular na caixa de texto Pools de workers do build.

Para saber mais, consulte Executar builds em um pool particular.

Proteger o build com uma conta de serviço personalizada

As funções do Cloud Run usam o código-fonte e o enviam ao Cloud Build para ser conteinerizado. A função conteinerizada é armazenada no Artifact Registry e implantada no Cloud Run como um serviço. Por padrão, o Cloud Build atribui uma conta de serviço para atuar como principal ao executar o build. A partir de julho de 2024, os novos projetos em uma organização vão usar a conta de serviço padrão do Compute Engine como a principal para executar um build. Para mais detalhes, consulte Mudança na conta de serviço padrão do Cloud Build. Por motivos de segurança, a conta de serviço padrão do Compute Engine não tem permissões suficientes para executar o build.

Para projetos do Google Cloud criados antes de julho de 2024, o Cloud Build usa a conta de serviço legada do Cloud Build. Essa conta de serviço foi projetada para ajudar os usuários a executar uma ampla variedade de casos de uso que podem ser muito permissivos para as necessidades do seu projeto. Se você quiser mover seus projetos atuais para fora dessa conta de serviço, siga as etapas abaixo para aumentar a segurança do ambiente de build de funções:

  1. Impeça que a conta de serviço legada do Cloud Build seja usada para o build.
  2. Impeça que a conta de serviço de computação padrão seja usada para o build.
  3. Configure uma nova conta de serviço com permissões de escopo adequado para serem usadas no build.
  4. Use a conta de serviço configurada para o build.

Impedir que a conta de serviço legada do Cloud Build seja usada para o build

É possível verificar se o projeto está usando a conta de serviço herdada do Cloud Build inspecionando os detalhes do build da função. A conta de serviço de build padrão tem o seguinte formato:

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

É possível desativar o uso dessa conta de serviço definindo a restrição de política da organização cloudbuild.useBuildServiceAccount como Not Enforced. Como alternativa, remover todas as permissões de função vai limitar a capacidade de acessar os recursos do Google Cloud.

Impedir que a conta de serviço de computação padrão seja usada para build

A conta de serviço padrão do Compute tem o formato PROJECT_NUMBER-compute@developer.gserviceaccount.com. Para desativar o padrão usado para o build, defina a política da organização cloudbuild.useComputeServiceAccount como Not Enforced. Outra opção é desativar essa conta de serviço para que ela não seja usada para acessar recursos do Google Cloud.

Fornecer uma conta de serviço para criar funções

Como parte da configuração de uma função, uma conta de serviço do build pode ser especificada ao implantar a função. Quando a conta de serviço legada do Cloud Build e a conta de serviço de computação padrão não podem ser usadas para build, especifique uma conta de serviço de build para implantar uma função.

Consulte Conta de serviço personalizada para o Cloud Build para saber como configurar e usar uma conta de serviço de build para sua função.