Como criar imagens do Cloud Functions

Visão geral

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 o código automaticamente em uma imagem de contêiner e envia essa imagem para um registro de imagens (Container Registry ou Artifact Registry). 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 Container Registry ou no Artifact Registry.

  • como o Cloud Storage é usado diretamente no projeto, o diretório de código-fonte das funções é visível em um bucket chamado gcf-sources-PROJECT_NUMBER-REGION.

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 o projeto no menu suspenso e clique em Continuar.

  • 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 Container Registry, consulte a página Preços.

    • Para preços do Artifact Registry, 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.

Como acessar 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 tela Funções, clique no Nome da função em que você tem interesse. A página Detalhes da função é aberta.

  2. Role a página para baixo até ver a seção Criação de contêiner. Se o build não tiver erros, você verá um link que pode ser acessado para exibir o registro do build. Se o build tiver erros, como você verá abaixo, a seção Criação de contêiner os mostrará in-line. Clique em Saiba mais para exibir o registro do build diretamente.

    Captura de tela que mostra a saída da seção "Criação de contêiner"

  3. A tela Visualizador de registros é aberta. Clique na entrada em que você tem interesse.

  4. A entrada de registro do build completa é aberta, mostrando o arquivo afetado, uma descrição do erro (nesse caso, uma chave ausente em pom.xml e a linha e coluna do erro).

    Captura de tela que mostra a entrada de registro do build

Opções de registro de imagem

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 (1ª geração) usa o Container Registry por padrão, mas também permite usar o Artifact Registry. No Cloud Functions (1ª geração), é possível criar ou atualizar uma função baseada no Artifact Registry da seguinte maneira:

Console

  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, versão, conexões e configurações de segurança para expandir as opções avançadas de configuração.

  5. Clique em Repositório de imagens e segurança para abrir a guia "Segurança".

  6. Em Repositório de imagens > Local do contêiner, selecione uma das opções a seguir, 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 Deploy.

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

Para informações detalhadas sobre preços, consulte Preços do Cloud Functions.

Como proteger seu 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 Cloud

    Na seção Create function, na seção Runtime, build and connections settings, selecione a guia Build e insira o PRIVATE_POOL_NAME na caixa de texto Build worker pools Selected environment, em que PRIVATE_POOL_NAME é o nome do seu pool.

    Captura de tela do Console do Cloud