Criar uma função com buildpacks

Este guia mostra como usar buildpacks com o código-fonte da sua função para criar uma imagem de contêiner. Por exemplo, use buildpacks para criar uma função do Cloud que você quer implantar no Cloud Run.

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.

Como configurar o projeto para criar funções

Para criar funções com buildpacks, use a biblioteca do Functions Framework. Defina a variável de ambiente GOOGLE_FUNCTION_TARGET como o nome da função usada como ponto de entrada. Para detalhes sobre como usar variáveis de ambiente com o Cloud Functions, consulte Configurar serviços do Cloud Functions.

Builds locais

Use a CLI pack para criar suas funções localmente em uma imagem de contêiner.

Antes de começar

  1. Instale o Docker Community Edition (CE) na estação de trabalho. O Docker é usado pela pack como um builder de imagens OCI.
  2. Instale a CLI Pack.
  3. Instale a ferramenta de controle de origem Git para buscar o aplicativo de amostra 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.

  1. Clone o repositório de amostra na máquina local:
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. 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
  3. 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
  4. 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
  5. 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 armazenamento e implantação de cada imagem.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Cloud Build and Artifact Registry.

    Ative as APIs

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  9. Ative as APIs Cloud Build and Artifact Registry.

    Ative as APIs

  10. Instale a CLI do Google Cloud.
  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  12. 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:

    1. Crie um novo repositório do Docker no mesmo local do seu projeto do Google Cloud.
      gcloud artifacts repositories create REPO_NAME \
      --repository-format=docker \
      --location=REGION --description="DESCRIPTION"
      
      Substitua:
      • 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 em us-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"
      
    2. 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.

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. 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.

  1. 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
    • 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.
  2. 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.

  1. Clone o repositório de amostra na máquina local:
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. 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
  3. 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.

  4. 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. 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