Compila una función con paquetes de compilación

En esta guía, se muestra cómo usar paquetes de compilación con el código fuente de la función para crear una imagen de contenedor. Por ejemplo, usa paquetes de compilación para compilar una función de Cloud Functions que quieras implementar en Cloud Run.

Existen dos métodos para compilar imágenes de contenedores con paquetes de compilación:

  • Compila de forma local con la CLI de pack para probar tu función de forma local y crear prototipos rápidamente de los cambios antes de la implementación.
  • Compila de forma remota con Cloud Build. La compilación con Cloud Build es útil para las funciones que tienen procesos de compilación de uso intensivo de recursos y también puede ayudar a proteger tu cadena de suministro de software.

Configura tu proyecto para compilar funciones

Para compilar funciones con paquetes de compilación, sigue estos pasos:

  • Incluye la biblioteca de Functions Framework.

  • Establece la variable de entorno GOOGLE_FUNCTION_TARGET en el nombre de la función que usas como punto de entrada. Para ello, incluye un project.toml en la misma carpeta que el código fuente. El archivo project.toml debe tener la siguiente configuración:

[[build.env]]
    name = "GOOGLE_FUNCTION_TARGET"
    value =  "ENTRY_POINT"

Reemplaza ENTRY_POINT por el método de la función.

Para obtener detalles sobre cómo usar las variables de entorno con Cloud Functions, consulta Configura los servicios de Cloud Functions.

Compilaciones locales

El paquete es una herramienta de la CLI mantenida por el proyecto de CNB para admitir el uso de paquetes de compilación. Usa la CLI de pack para compilar las funciones de forma local en una imagen de contenedor.

Antes de comenzar

  1. Instala la edición de la comunidad de Docker (CE) en tu estación de trabajo. pack usa Docker como un compilador de imágenes de OCI.
  2. Instala la CLI de Pack.
  3. Instala la herramienta de control de fuente Git para obtener la aplicación de ejemplo de GitHub.

Compila una función de forma local

Usa el comando pack build y especifica el compilador predeterminado --builder=gcr.io/buildpacks/builder para compilar las imágenes de contenedor de forma local.

pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME

Sustituye IMAGE_NAME por el nombre de la imagen de contenedor

También puedes personalizar la imagen de contenedor mediante la extensión de la compilación y ejecución de imágenes.

Compila una función de muestra de forma local

En los siguientes ejemplos, se muestra cómo compilar una muestra de forma local.

  1. Clona el repositorio de muestra en tu máquina local:
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. Ve al directorio que contiene el código de muestra de la aplicación:

    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. Usa pack para compilar la función de muestra:

    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. Ejecuta la imagen con 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. Visita localhost:8080 para visitar la función en ejecución.

Compilaciones remotas

Usa Cloud Build para compilar la función en una imagen de contenedor y Artifact Registry como el repositorio de contenedores para almacenar y, luego, implementar cada imagen.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Enable the Cloud Build and Artifact Registry APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Enable the Cloud Build and Artifact Registry APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Asegúrate de que tu proyecto de Google Cloud tenga acceso a un repositorio de imágenes de contenedor.

    Para configurar el acceso a un repositorio de Docker en Artifact Registry, haz lo siguiente:

    1. Crea un nuevo repositorio de Docker en la misma ubicación de tu proyecto de Google Cloud.
      gcloud artifacts repositories create REPO_NAME \
      --repository-format=docker \
      --location=REGION --description="DESCRIPTION"
      
      Reemplaza lo siguiente:
      • REPO_NAME por el nombre que elijas para el repositorio de Docker.
      • REGION por la ubicación en la ubicación de tu proyecto de Google Cloud o más cercana a ella.
      • DESCRIPTION por una descripción que elijas.

      Por ejemplo, para crear un repositorio de docker en us-west2 con la descripción “Repositorio de Docker”, ejecuta lo siguiente:

      gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \
      --location=us-west2 --description="Docker repository"
      
    2. Verifica que se haya creado el repositorio:
      gcloud artifacts repositories list
      

      Deberías ver el nombre que elijas para tu repositorio de Docker en la lista.

Compila una función de forma remota

Usa el comando gcloud builds submit para compilar y subir la imagen de contenedor a tu repositorio.

Puedes especificar tu imagen de contenedor en el comando o usar un archivo de configuración.

Cómo compilar con el comando

Para compilar sin un archivo de configuración, especifica la marca image:

gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

Reemplaza lo siguiente:

  • LOCATION por el nombre de la región de tu repositorio de contenedores, por ejemplo, us-west2
  • PROJECT_ID por el ID del proyecto de Google Cloud.
  • REPO_NAME por el nombre de tu repositorio de Docker.
  • IMAGE_NAME por el nombre de la imagen de contenedor

Ejemplo:

gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo

Cómo compilar con archivos de configuración

Puedes usar un archivo de configuración para definir los detalles de configuración de tu repositorio de imágenes con solo el comando de compilación. El archivo de configuración usa el formato de archivo YAML y debe incluir un paso de compilación que use la CLI de pack.

  1. Crea un archivo YAML llamado cloudbuild.yaml que incluya el URI de tu repositorio de imágenes de contenedor.

    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
    

    Reemplaza lo siguiente:

    • LOCATION por el nombre de la región de tu repositorio de contenedores. Ejemplo:us-west2
    • PROJECT_ID por el ID del proyecto de Google Cloud.
    • REPO_NAME por el nombre de tu repositorio de Docker.
    • IMAGE_NAME por el nombre de la imagen de contenedor
  2. Compila la aplicación.

    Si nombras al archivo de configuración cloudbuild.yaml, puedes ejecutar el siguiente comando:

    gcloud builds submit .
    

Ejemplo: Compila una función de muestra de forma remota

En los siguientes ejemplos, se muestra cómo compilar una muestra de forma remota y verificar que la imagen del contenedor se haya enviado a tu repositorio en Artifact Registry.

  1. Clona el repositorio de muestra en tu máquina local:
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. Ve al directorio que contiene el código de muestra de la aplicación:

    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. Usa gcloud para enviar el código fuente de la aplicación a 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

    Reemplaza lo siguiente:

    • LOCATION por el nombre de región de tu repositorio de contenedores. Ejemplo: us-west2-docker.pkg.dev
    • PROJECT_ID por el ID del proyecto de Google Cloud.
    • REPO_NAME por el nombre de tu repositorio de Docker.

  4. Verifica que la función de muestra se haya publicado de forma correcta en REPO_NAME:
    gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME

    Reemplaza lo siguiente:

    • LOCATION por el nombre de la región de tu repositorio de contenedores, por ejemplo, us-west2.
    • PROJECT_ID por el ID del proyecto de Google Cloud.
    • REPO_NAME por el nombre de tu repositorio de Docker.

Pasos siguientes