O Cloud Run suporta a implementação direta de funções. No entanto, também pode criar a sua função numa imagem de contentor através dos buildpacks da Google Cloud e, em seguida, implementar esta imagem de contentor no Cloud Run.
Alguns exemplos de utilização comuns para criar funções no contentor incluem:
- Integração e entrega contínuas: os programadores criam e enviam código de funções para um repositório de origem. Um sistema de CI/CD compila automaticamente a função num contentor, executa testes e implementa-a automaticamente num ambiente de preparação.
- Infraestrutura como código: os recursos do Cloud Run geridos através de YAML ou Terraform fazem referência a um URL de imagem de contentor. O código da função escrito pelos programadores tem de ser incorporado numa imagem de contentor.
Esta página detalha como pode replicar o processo de compilação exato das funções do Cloud Run de duas formas:
- Usar a CLI
pack
- Usar o Cloud Build como sistema de compilação 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_TARGET
com o nome da função que usa como ponto de entrada. Pode fazê-lo incluindo umproject.toml
na mesma pasta que o código-fonte. O ficheiroproject.toml
tem de ter a seguinte configuração:
[[build.env]]
name = "GOOGLE_FUNCTION_TARGET"
value = "ENTRY_POINT"
Substitua ENTRY_POINT pelo método da função.
Para ver detalhes sobre como usar variáveis de ambiente com funções do Cloud Run, consulte o artigo Configure serviços de funções do Cloud Run.
Construtores
As funções do Cloud Run são criadas com base em imagens base mantidas e publicadas nos buildpacks do Google Cloud.
As compilações são imagens que consistem em buildpacks e pacotes do sistema operativo (também conhecidos como Stacks). Os criadores são usados para converter o código fonte da sua função num contentor em execução.
Pode escolher a partir da lista de criadores de buildpacks do Google Cloud suportados.
Criar com o pack
Pack
é uma ferramenta de CLI mantida pelo projeto CNB para suportar a utilização de buildpacks. Use a
CLI para criar localmente as suas funções numa imagem de contentor.pack
Antes de começar
- Instale o Docker Community Edition (CE) na sua estação de trabalho. O Docker é usado pelo
pack
como um criador de imagens OCI. - Instale a CLI Pack.
- Instale a ferramenta Git source control para obter a aplicação de exemplo do GitHub.
Crie uma função localmente
Use o comando pack build
e especifique o criador predefinido --builder=gcr.io/buildpacks/builder
para criar as imagens de contentores localmente.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
Substitua IMAGE_NAME pelo nome da imagem do contentor.
Também pode personalizar a imagem do contentor estendendo as imagens de compilação e execução.
Crie uma função de exemplo localmente
Os exemplos seguintes demonstram como criar uma amostra localmente.
- Clone o repositório de exemplo para a sua 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 da aplicação:
Ir
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
pack
para criar a função de exemplo:Ir
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 através do
docker
:Ir
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
- Visite a função em execução navegando para localhost:8080.
Compilar com um sistema de compilação remoto
Use o Cloud Build para criar a sua função numa imagem de contentor e o Artifact Registry como repositório de contentores para armazenar e implementar cada imagem.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Certifique-se de que o seu Google Cloud projeto tem acesso a um repositório de imagens de contentores.
Para configurar o acesso a um repositório do Docker no Artifact Registry:
- Crie um novo repositório do Docker na mesma localização do seu Google Cloud projeto.
Substituir:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAME
com o nome que escolher para o seu repositório do Docker.REGION
com a localização no local ou mais próximo da localização do seu Google Cloud projeto.DESCRIPTION
com uma descrição à sua escolha.
Por exemplo, para criar um repositório
docker
emus-west2
com 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
Deve ver o nome que escolheu para o seu repositório do Docker na lista.
- Crie um novo repositório do Docker na mesma localização do seu Google Cloud projeto.
LOCATION
com o nome da região do seu repositório de contentores, por exemplo,us-west2
PROJECT_ID
com o ID do seu Google Cloud projeto.REPO_NAME
com o nome do seu repositório do Docker.IMAGE_NAME
com o nome da imagem do contentor.- Crie um nome de ficheiro YAML
cloudbuild.yaml
que inclua o URI do repositório de imagens de contentores. LOCATION
com o nome da região do seu repositório de contentores, por exemplo,us-west2
.PROJECT_ID
com o ID do seu Google Cloud projeto.REPO_NAME
com o nome do seu repositório do Docker.IMAGE_NAME
com o nome da imagem do contentor.Crie a aplicação.
Se deu ao ficheiro de configuração o nome
cloudbuild.yaml
, pode executar o seguinte comando:gcloud builds submit .
- Clone o repositório de exemplo para a sua 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 da aplicação:
Ir
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
gcloud
para enviar o código-fonte da aplicação para o Cloud Build:Ir
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
Substituir:
LOCATION
com o nome da região do seu repositório de contentores. Exemplo:us-west2-docker.pkg.dev
PROJECT_ID
com o ID do seu Google Cloud projeto.REPO_NAME
com o nome do seu repositório do Docker.
-
Confirme se a função de exemplo foi publicada com êxito em
REPO_NAME
:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
Substituir:
LOCATION
com o nome da região do seu repositório de contentores, por exemplo,us-west2
.PROJECT_ID
com o ID do seu Google Cloud projeto.REPO_NAME
com o nome do seu repositório do Docker.
LOCATION
com o nome da região do seu repositório de contentores, por exemplo,us-west2
.IMAGE_NAME
com o nome da imagem do contentor.LANGUAGE
com o idioma da sua função, por exemplo,nodejs
.RUNTIME_ID
com o ID de tempo de execução, por exemplo,nodejs22
.LOCATION
com o nome da região do seu repositório de contentores, por exemplo,us-west2
.PROJECT_ID
com o ID do seu Google Cloud projeto.REPO_NAME
com o nome do seu repositório do Docker.IMAGE_NAME
com o nome da imagem do contentor.LANGUAGE
com o idioma da sua função, por exemplo,nodejs
.RUNTIME_ID
com o ID de tempo de execução, por exemplo,nodejs22
.- Depois de criar a função num contentor, teste-a localmente antes de a implementar no Cloud Run. Consulte o artigo Testar um serviço do Cloud Run localmente para saber mais.
- Para implementar os contentores criados no Cloud Run, siga as instruções em Implementar serviços.
- Para automatizar as compilações e as implementações dos seus serviços do Cloud Run com acionadores do Cloud Build, consulte o artigo Configure a implementação contínua.
Crie uma função remotamente
Use o comando gcloud builds submit
para criar e carregar a imagem do contentor para o seu repositório.
Pode optar por especificar a imagem do contentor no próprio comando ou usar um ficheiro de configuração.
Crie com comandos
Para criar sem um ficheiro de configuração, especifique a flag image
:
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Substituir:
Exemplo:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo
Crie com ficheiros de configuração
Pode usar um
ficheiro de configuração
para definir os detalhes de configuração do repositório de imagens
para simplificar o comando de compilação. O ficheiro de configuração usa o formato de ficheiro YAML e tem de incluir um passo de compilação que use a CLI pack
.
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 images: - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Substituir:
Exemplo: crie uma função de exemplo remotamente
Os exemplos seguintes demonstram como criar uma amostra remotamente e verificar se a imagem do contentor foi enviada para o seu repositório no Artifact Registry.
Criar uma função para atualizações automáticas de imagens base
Os contentores de funções também podem ser criados no scratch
, o que permite a sua utilização em combinação com as atualizações de segurança automáticas do Cloud Run.
Ficheiro Docker
Pode usar a sua cadeia de ferramentas de compilação existente para criar uma imagem de contentor de funções compatível com atualizações automáticas de imagens base. Consulte as instruções sobre como criar um contentor a partir do zero.
pack
CLI
pack build IMAGE_NAME \
--builder LOCATION-docker.pkg.dev/serverless-runtimes/google-22-full/builder/LANGUAGE:latest
--run-image LOCATION-docker.pkg.dev/serverless-runtimes/google-22/scratch/RUNTIME_ID:latest
Substituir:
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-22-full/builder/LANGUAGE:latest
- --run-image
- LOCATION-docker.pkg.dev/serverless-runtimes/google-22/scratch/RUNTIME_ID:latest
- --network
- cloudbuild
images:
- LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Substituir: