Há dois métodos para criar imagens de contêiner com buildpacks:
- Crie localmente com a CLI
pack
para testar localmente sua função e prototipar com rapidez as alterações antes da implantação. - Crie remotamente com o Cloud Build. A criação com o Cloud Build é útil para funções que têm processos de build com uso intensivo de recursos e também pode ajudar a proteger sua cadeia de suprimentos de software.
Configurar projetos para criar funções
Para criar funções com buildpacks:
Inclua a biblioteca Functions Framework.
Defina a variável de ambiente
GOOGLE_FUNCTION_TARGET
como o nome da função usada como ponto de entrada. Você pode fazer isso incluindo umproject.toml
na mesma pasta que o código-fonte. O arquivoproject.toml
precisa 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 Configurar os serviços de funções do Cloud Run.
Builds locais
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
pack
como 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 sua imagem de contêiner.
Também é possível personalizar a imagem de 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
pack
para 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.
Builds remotos
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
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Verifique se o projeto do Google Cloud 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 projeto do Google Cloud.
Substitua:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAME
pelo nome que você escolheu para o repositório do Docker.REGION
pelo local dentro ou mais próximo do local do seu projeto do Google Cloud.DESCRIPTION
com uma descrição da 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
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 projeto do Google Cloud.
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:
LOCATION
pelo nome da região do repositório de contêineres, por exemplo,us-west2
PROJECT_ID
pelo ID do seu projeto do Google Cloud.REPO_NAME
pelo nome do repositório do Docker.IMAGE_NAME
pelo 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
como simplesmente o comando de build. 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.yaml
que 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
Substitua:
LOCATION
pelo nome da região do repositório de contêineres. Exemplo:us-west2
PROJECT_ID
pelo ID do seu projeto do Google Cloud.REPO_NAME
pelo nome do repositório do Docker.IMAGE_NAME
pelo 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 de 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
gcloud
para 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:
LOCATION
pelo nome da região do repositório de contêineres. Exemplo:us-west2-docker.pkg.dev
PROJECT_ID
pelo ID do seu projeto do Google Cloud.REPO_NAME
pelo 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:
LOCATION
pelo nome da região do repositório de contêineres, por exemplo,us-west2
.PROJECT_ID
pelo ID do seu projeto do Google Cloud.REPO_NAME
pelo nome do repositório do Docker.
Próximas etapas
- Implantar a imagem da função no Cloud Run.
- Definir as variáveis de ambiente.
- Configurar imagens de build.
- Acelere builds com imagens em cache.