Vista geral do processo de compilação

Quando implementa o código fonte da sua função nas funções do Cloud Run, esse código fonte é armazenado num contentor do Cloud Storage. Em seguida, o Cloud Build compila automaticamente o seu código numa imagem de contentor e envia essa imagem para um registo de imagens. As funções do Cloud Run acedem a esta imagem quando precisam de executar o contentor para executar a sua função.

O processo de criação da imagem é totalmente automático e não requer qualquer introdução direta da sua parte. Todos os recursos usados no processo de compilação são executados no seu próprio projeto de utilizador.

A execução do processo de compilação no seu projeto significa que:

  • Tem acesso direto a todos os registos de compilação.

  • Não existe uma quota de tempo de compilação predefinida, embora o Cloud Build tenha a sua quota de simultaneidade predefinida.

  • Pode ver a imagem do contentor atual e as imagens do contentor implementadas anteriormente, que estão armazenadas no Artifact Registry.

  • O Cloud Storage é usado no seu projeto para armazenar o diretório do código fonte das suas funções. Tenha em conta o seguinte:

    • Se criar uma função, é criado um contentor de carregamento para guardar o seu código fonte. Este contentor de carregamento tem o nome gcf-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com.
    • Depois de o código ser carregado, o código da função é armazenado num contentor de origem separado:
      • Se estiver a usar a encriptação predefinida, este contentor tem o nome gcf-sources-PROJECT_NUMBER-REGION.
      • Se estiver a proteger os seus dados com a CMEK, o contentor tem o nome gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH.
    • Os contentores de origem e de carregamento não têm um período de retenção.

Caraterísticas do processo de compilação

O processo de criação tem as seguintes caraterísticas:

  • A API Cloud Build tem de estar ativada para o seu projeto.

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

  • Uma vez que todo o processo de criação ocorre no contexto do seu projeto, o projeto está sujeito aos preços dos recursos incluídos:

    • Para ver os preços do Cloud Build, consulte a página de preços. Este processo usa o tamanho da instância predefinido do Cloud Build, uma vez que estas instâncias são pré-aquecidas e estão disponíveis mais rapidamente. O Cloud Build oferece um nível gratuito: reveja o documento de preços para obter mais detalhes.

    • Para ver os preços do Cloud Storage, consulte a página Preços. O Cloud Storage oferece um Nível gratuito: reveja o documento de preços para mais detalhes.

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

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

  • Uma vez que o processo de compilação está sujeito a faturação, o seu projeto tem de ter uma conta do Cloud Billing associada.

Veja os registos de imagens de compilação

Uma das principais vantagens de ter o processo de criação de imagens no seu projeto de utilizador é o acesso aos registos de criação. Pode usar a CLI gcloud ou a Google Cloud consola para aceder aos registos, que estão disponíveis através do Cloud Logging.

gcloud

  1. Implemente a sua função através do gcloud functions deploy comando.

  2. O URL dos registos é apresentado como parte da resposta na janela do terminal. Por 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.

Google Cloud consola

  1. Na janela Vista geral das funções do Cloud Run, clique no nome da função que está a investigar.
  2. Clique no separador Detalhes.
  3. No painel Informações gerais, clique no link Registo de compilação do contentor para abrir o painel Explorador de registos.
  4. Clique em qualquer linha para ver os detalhes dessa entrada do registo de compilação. Se for uma entrada de erro associada a um ficheiro, estes detalhes incluem o nome, a linha e a coluna do ficheiro.

Registo de imagens

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

O Artifact Registry tem de estar no mesmo projeto que a sua função. Pode criar ou atualizar uma função baseada no Artifact Registry da seguinte forma:

gcloud

Para o Artifact Registry gerido pelo cliente, execute o seguinte comando:

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

Substitua o seguinte:

  • 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 gerido pela Google, use:

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

Google Cloud consola

  1. Aceda à página de funções do Cloud Run na Google Cloud consola:
    Aceda à página de funções do Cloud Run

  2. Clique no nome da função para a qual quer usar o Artifact Registry.

  3. Clique em Edit.

  4. Clique em Tempo de execução, compilação… para expandir as opções de configuração avançadas.

  5. Clique em Segurança e repositório de imagens na barra de menu para abrir o separador Segurança.

  6. Em Repositório de imagens, selecione uma das seguintes opções, consoante o tipo de Artifact Registry que está a usar:

    • Artifact Registry gerido pelo cliente. Use esta opção se configurar o seu próprio repositório do Docker.
    • Artifact Registry gerido pela Google. Use esta opção se quiser usar um repositório Docker gerido pela Google em vez de configurar o seu próprio.
  7. Para o Artifact Registry gerido pelo cliente, use o menu pendente Artifact Registry para selecionar o repositório do Artifact Registry pretendido ou siga as instruções e crie um novo.

  8. Clicar em Seguinte.

  9. Clique em Implementar.

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

Proteja a sua compilação com pools privados

Para permitir que as suas funções usem dependências (por exemplo, pacotes npm), o Cloud Build tem, por predefinição, acesso ilimitado à Internet durante o processo de compilação. Se configurou um perímetro dos VPC Service Controls (VPC SC) e quer limitar o acesso da compilação apenas a dependências armazenadas no interior do perímetro, pode usar a funcionalidade conjuntos de trabalhadores privados do Cloud Build.

Em geral, siga estes passos para configurar o seu conjunto privado:

  1. Crie o seu pool de trabalhadores privado. Consulte o artigo Criar e gerir pools privados.
  2. Configure o perímetro do VPC Service Controls. Consulte o artigo Usar os VPC Service Controls.

  3. Se o seu conjunto de trabalhadores privado estiver num projeto diferente da sua função, tem de conceder à conta de serviço do agente de serviço das funções do Cloud Run (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) a função cloudbuild.workerPoolUser para que o serviço do Cloud Build possa aceder ao conjunto de trabalhadores.

    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

    onde FUNCTION_PROJECT_NUMBER é o número do projeto onde a função é executada e PRIVATE_POOL_PROJECT_ID é o ID do projeto no qual o conjunto de trabalhadores está localizado. Consulte o artigo Executar compilações num pool privado para mais informações.

  4. Implemente a sua função para compilar através de um pool privado:

gcloud

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

onde FUNCTION_NAME é o nome da função, RUNTIME é o tempo de execução que está a usar e PRIVATE_POOL_NAME é o nome do seu conjunto.

Para parar de usar um determinado conjunto privado e, em alternativa, usar o conjunto do Cloud Build predefinido, use a flag --clear-build-worker-pool quando voltar a implementar.

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 tempo de execução que está a usar.

Google Cloud consola

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

  2. Na secção Tempo de execução, compilação..., clique no separador Compilar e introduza o nome completo do recurso do seu conjunto privado na caixa de texto Compilar conjuntos de trabalhadores.

Para mais informações, consulte o artigo Execute compilações num conjunto privado.

Proteja a sua compilação com uma conta de serviço personalizada

As funções do Cloud Run usam o seu código fonte e enviam-no para o Cloud Build para ser colocado num contentor. A função em contentor é armazenada no Artifact Registry e implementada no Cloud Run como um serviço. Por predefinição, o Cloud Build atribui uma conta de serviço para atuar como principal quando executa a compilação. A partir de julho de 2024, os novos projetos numa organização vão usar a conta de serviço predefinida do Compute Engine para atuar como o principal que executa uma compilação. Para ver detalhes, consulte o artigo Alteração da conta de serviço predefinida do Cloud Build. Por motivos de segurança, a conta de serviço predefinida do Compute Engine não tem autorizações suficientes para realizar a compilação.

Para Google Cloud projetos criados antes de julho de 2024, o Cloud Build usa a conta de serviço do Cloud Build antiga. Esta conta de serviço foi concebida para ajudar os utilizadores a executar uma vasta gama de exemplos de utilização que podem ser demasiado permissivos para as necessidades do seu projeto. Se quiser mover os seus projetos existentes desta conta de serviço, pode seguir os passos seguintes para proteger ainda mais o ambiente de compilação das funções:

  1. Impedir que a conta de serviço do Cloud Build antiga seja usada para a compilação.
  2. Impedir que a conta de serviço predefinida do Compute seja usada para a compilação.
  3. Configure uma nova conta de serviço com autorizações com âmbito adequado para ser usada para a compilação.
  4. Use a conta de serviço configurada para a compilação.

Impeça a utilização da conta de serviço do Cloud Build antiga para a compilação

Pode verificar se o seu projeto está a usar a conta de serviço do Cloud Build antigo inspecionando os detalhes da compilação da sua função. A conta de serviço de compilação predefinida tem o seguinte formato:

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

Pode desativar à força a utilização desta conta de serviço definindo a restrição da política organizacional cloudbuild.useBuildServiceAccount como Not Enforced. Em alternativa, a remoção de todas as atribuições de funções limita a capacidade de acesso aos recursos do Google Cloud.

Impeça a utilização da conta de serviço de computação predefinida para a compilação

A conta de serviço predefinida do Compute tem o formato PROJECT_NUMBER-compute@developer.gserviceaccount.com. Pode desativar a utilização desta funcionalidade como predefinição para a compilação definindo a política org cloudbuild.useComputeServiceAccount como Not Enforced. Em alternativa, a desativação desta conta de serviço impede a sua utilização para aceder Google Cloud a recursos.

Forneça uma conta de serviço para criar funções

Como parte da configuração de uma função, pode especificar uma conta de serviço de compilação quando implementar a função. Quando a conta de serviço do Cloud Build antiga e a conta de serviço predefinida do Compute não podem ser usadas para a compilação, tem de especificar uma conta de serviço de compilação para implementar uma função.

Consulte o artigo Conta de serviço personalizada para o Cloud Build para configurar e usar uma conta de serviço de compilação para a sua função.