O Cloud Run oferece suporte à implantação direta de funções. No entanto, também é possível criar a função em uma imagem de contêiner usando os buildpacks do Google Cloud e implantar essa imagem de contêiner no Cloud Run.
Os casos de uso comuns para criar funções em contêineres incluem:
- Integração e entrega contínuas: os desenvolvedores criam e enviam o código da função para um repositório de origem. Um sistema de CI/CD cria automaticamente a função em um contêiner, executa testes e a implanta automaticamente em um ambiente de preparação.
- Infraestrutura como código: os recursos do Cloud Run gerenciados usando YAML ou Terraform referenciam um URL de imagem de contêiner. O código de função escrito pelos desenvolvedores precisa ser criado em uma imagem de contêiner.
Nesta página, detalhamos como replicar o processo de build exato das funções do Cloud Run usando duas maneiras:
- Usando a CLI
pack - Usar o Cloud Build como o sistema de build remoto
Ponto de entrada da função
Para criar funções com buildpacks:
Inclua a biblioteca Functions Framework.
Defina a variável de ambiente
GOOGLE_FUNCTION_TARGETcomo o nome da função usada como ponto de entrada. Você pode fazer isso incluindo umproject.tomlna mesma pasta que o código-fonte. O arquivoproject.tomlprecisa ter a seguinte configuração:
[[build.env]]
name = "GOOGLE_FUNCTION_TARGET"
value = "ENTRY_POINT"
Substitua ENTRY_POINT pelo método da função.
Para mais detalhes sobre como usar variáveis de ambiente com funções do Cloud Run, consulte Configure os serviços de funções do Cloud Run.
Builders
As funções do Cloud Run são criadas com base em imagens de base mantidas e publicadas nos buildpacks do Google Cloud.
Os builders são imagens que consistem em buildpacks e pacotes do sistema operacional (também conhecidos como stacks). Os builders são usados para converter o código-fonte da função em um contêiner em execução.
É possível escolher na lista de builders de buildpacks do Google Cloud com suporte.
Como criar com pack
Pacote
é uma ferramenta de CLI mantida pelo projeto CNB para dar suporte ao uso de buildpacks. Use a CLI pack para criar suas funções localmente em uma imagem de contêiner.
Antes de começar
- Instale o Docker Community Edition (CE) na
estação de trabalho. O Docker é usado pela
packcomo um builder de imagens OCI. - Instale a CLI Pack.
- Instale a ferramenta de controle de origem Git para buscar a amostra de aplicativo do GitHub.
Criar uma função localmente
Use o comando pack build e especifique o builder padrão --builder=gcr.io/buildpacks/builder para criar as imagens de contêiner localmente.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
Substitua IMAGE_NAME pelo nome da imagem do contêiner.
Também é possível personalizar a imagem do contêiner estendendo as imagens de build e execução.
Criar uma função de amostra localmente
Os exemplos a seguir demonstram como criar uma amostra localmente.
- Clone o repositório de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Altere para o diretório que contém o exemplo de código do aplicativo:
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
- Use
packpara criar a função de amostra:Go
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-go
Java
pack build --builder gcr.io/buildpacks/builder:v1 sample-functions-java-mvn
Node.js
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-node
Python
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-python
Ruby
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-ruby
- Execute a imagem usando
docker:Go
docker run -p8080:8080 sample-functions-framework-go
Java
docker run -it -ePORT=8080 -p8080:8080 sample-functions-java-mvn
Node.js
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-node
Python
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-python
Ruby
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-ruby
- Acesse a função em execução pelo localhost:8080.
Como criar com um sistema de build remoto
Use o Cloud Build para criar a função em uma imagem de contêiner e o Artifact Registry como repositório de contêineres para armazenar e implantar cada imagem.
Antes de começar
- Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - Verifique se o Google Cloud projeto tem acesso a um repositório de imagens de contêiner.
Para configurar o acesso a um repositório do Docker no Artifact Registry:
- Crie um novo repositório do Docker no mesmo local do seu Google Cloud projeto.
Substitua:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAMEpelo nome que você escolheu para o repositório do Docker.REGIONcom o local dentro ou mais próximo do local do seu Google Cloud projeto.DESCRIPTIONcom uma descrição da sua escolha.
Por exemplo, para criar um repositório
dockeremus-west2com a descrição "repositório do Docker", execute:gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- Verifique se o repositório foi criado:
gcloud artifacts repositories list
Na lista, você verá o nome que escolheu para o repositório do Docker.
- Crie um novo repositório do Docker no mesmo local do seu Google Cloud projeto.
Criar uma função remotamente
Use o comando gcloud builds submit para criar e fazer upload da imagem do contêiner para o repositório.
Especifique a imagem do contêiner no próprio comando ou use um arquivo de configuração.
Criar com o comando
Para criar sem um arquivo de configuração, especifique a flag image:
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Substitua:
LOCATIONpelo nome da região do repositório de contêineres, por exemplo,us-west2PROJECT_IDpelo ID do Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.IMAGE_NAMEpelo nome da imagem do contêiner.
Exemplo:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo
Criar com arquivos de configuração
Use um
arquivo de configuração
para definir os detalhes de configuração do repositório de imagens. O arquivo de configuração usa o formato YAML e precisa incluir uma etapa de build que usa a CLI pack.
Crie um nome de arquivo YAML
cloudbuild.yamlque inclua o URI do repositório de imagens do contêiner.options: logging: CLOUD_LOGGING_ONLY pool: {} projectId: PROJECT_ID steps: - name: gcr.io/k8s-skaffold/pack entrypoint: pack args: - build - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME - --builder - gcr.io/buildpacks/builder:latest - --network - cloudbuild - --publish - name: gcr.io/cloud-builders/docker entrypoint: pack args: - pull - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME images: - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAMESubstitua:
LOCATIONpelo nome da região do repositório de contêineres, por exemplo,us-west2.PROJECT_IDpelo ID do Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.IMAGE_NAMEpelo nome da imagem do contêiner.
Crie o aplicativo.
Se você nomeou seu arquivo de configuração
cloudbuild.yaml, execute o seguinte comando:gcloud builds submit .
Exemplo: criar uma função de exemplo remotamente
Os exemplos a seguir demonstram como criar uma amostra remotamente e, em seguida, verificar se a imagem do contêiner foi enviada para o repositório no Artifact Registry.
- Clone o repositório de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Altere para o diretório que contém o exemplo de código do aplicativo:
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
- Use
gcloudpara enviar o código-fonte do aplicativo para o Cloud Build:Go
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-go
Java
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-gradle
Node.js
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-node
Python
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-python
Ruby
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-ruby
Substitua:
LOCATIONpelo nome da região do repositório de contêineres. Exemplo:us-west2-docker.pkg.devPROJECT_IDpelo ID do Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.
-
Verifique se a função de amostra foi publicada em
REPO_NAME:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
Substitua:
LOCATIONpelo nome da região do repositório de contêineres, por exemplo,us-west2.PROJECT_IDpelo ID do Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.
Como criar uma função para atualizações automáticas de imagem de base
Os contêineres de função também podem ser criados no scratch, permitindo que sejam usados em
combinação com as atualizações de segurança automáticas do Cloud Run.
Dockerfile
Você pode usar o conjunto de ferramentas de build atual para criar uma imagem de contêiner de função compatível com atualizações automáticas de imagem de base. Consulte as instruções sobre como criar um contêiner no scratch.
CLI pack
pack build IMAGE_NAME \
--builder LOCATION-docker.pkg.dev/serverless-runtimes/google-24-full/builder/LANGUAGE:latest
--run-image LOCATION-docker.pkg.dev/serverless-runtimes/google-24/scratch/RUNTIME_ID:latest
Substitua:
LOCATIONpelo nome da região do repositório de contêineres, por exemplo,us-west2.IMAGE_NAMEpelo nome da imagem do contêiner.LANGUAGEpelo idioma da função, por exemplo,nodejs.RUNTIME_IDpelo ID do ambiente de execução, por exemplo,nodejs24.
Cloud Build
options:
logging: CLOUD_LOGGING_ONLY
pool: {}
projectId: PROJECT_ID
steps:
- name: gcr.io/k8s-skaffold/pack
entrypoint: pack
args:
- build
- LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
- --builder
- LOCATION-docker.pkg.dev/serverless-runtimes/google-24-full/builder/LANGUAGE:latest
- --run-image
- LOCATION-docker.pkg.dev/serverless-runtimes/google-24/scratch/RUNTIME_ID:latest
- --network
- cloudbuild
images:
- LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Substitua:
LOCATIONpelo nome da região do repositório de contêineres, por exemplo,us-west2.PROJECT_IDpelo ID do Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.IMAGE_NAMEpelo nome da imagem do contêiner.LANGUAGEpelo idioma da função, por exemplo,nodejs.RUNTIME_IDpelo ID do ambiente de execução, por exemplo,nodejs24.
A seguir
- Depois de criar a função em um contêiner, teste-a localmente antes de implantar no Cloud Run. Consulte Como testar um serviço do Cloud Run localmente para saber mais.
- Para implantar seus contêineres compilados no Cloud Run, consulte Como implantar serviços.
- Para automatizar as compilações e implantações dos serviços do Cloud Run usando os gatilhos do Cloud Build, consulte Configurar a implantação contínua.