Visão geral do processo de build

Quando você implanta o código-fonte da função no Cloud Functions, 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. O Cloud Functions acessa essa imagem quando precisa executar o contêiner para executar a 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 do Cloud Functions, clique no nome da função que você está investigando.
  2. Clique na guia Detalhes.
  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

O Cloud Functions (2nd gen) usa exclusivamente 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 Cloud Functions (1a geração) usa o Artifact Registry por padrão. O Container Registry será descontinuado.

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 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 FUNCTION \
--docker-registry=artifact-registry
[FLAGS...]

Console do Google Cloud

  1. Acesse a página do Cloud Functions no Console do Google Cloud:
    Acessar a página do Cloud Functions

  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 do Cloud Functions.

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) do Cloud Functions 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 \
  --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 \
  --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 do Cloud Functions, 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.