Existem dois métodos para criar imagens de contentores com buildpacks:
- Crie localmente com a CLI
pack
para testar localmente a sua função e criar protótipos de alterações rapidamente antes da implementação. - Crie remotamente com o Cloud Build. A criação com o Cloud Build é útil para funções que têm processos de compilação com muitos recursos e também pode ajudar a proteger a sua cadeia de abastecimento de software.
Configure o seu projeto para criar funções
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.
Compilações locais
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.
Compilações remotas
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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro 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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro 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 em ou mais próxima 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 o nome
cloudbuild.yaml
ao ficheiro de configuração, 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
Substituição:
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
Substituição:
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.
- Implemente a imagem da função no Cloud Run.
- Defina variáveis de ambiente.
- Configure imagens de compilação.
- Acelere as compilações com imagens da cache.
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
Substituição:
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
Substituição:
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.