Las funciones creadas para Cloud Run se pueden compilar con los paquetes de compilación de Google Cloud.
En esta página, se muestran dos formas de compilar tus funciones para su implementación en Cloud Run:
- Usa la CLI de
pack
- Usa Cloud Build como el sistema de compilación remoto
Punto de entrada de la función
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 unproject.toml
en la misma carpeta que el código fuente. El archivoproject.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 las funciones de Cloud Run, consulta Configura los servicios de funciones de Cloud Run.
Compiladores
Las funciones se compilan sobre las imágenes base que se mantienen y publican en los paquetes de compilación de Google Cloud.
Los compiladores son imágenes que consisten en paquetes de compilación y del sistema operativo (también conocidos como pilas). Los compiladores se usan para convertir el código fuente de la función en un contenedor en ejecución.
Puedes elegir entre la lista de compiladores de paquetes de compilación de Google Cloud compatibles.
Compila con pack
Pack es una herramienta de 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
- 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. - Instala la CLI de Pack.
- 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.
- Clona el repositorio de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 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
- 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
- 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
- Visita localhost:8080 para visitar la función en ejecución.
Cómo compilar con un sistema de compilación remoto
Usa Cloud Build para compilar la función en una imagen de contenedor y Artifact Registry como el repositorio de contenedores para implementar y almacenar cada imagen.
Antes de comenzar
- 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
- 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:
- Crea un nuevo repositorio de Docker en la misma ubicación de tu proyecto de Google Cloud.
Reemplaza lo siguiente:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
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
enus-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"
- 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.
- Crea un nuevo repositorio de Docker en la misma ubicación de tu proyecto de Google Cloud.
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
.
- 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 images: - 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
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.
- Clona el repositorio de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 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
- 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.
-
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.
Cómo compilar una función para actualizaciones automáticas de imágenes base
Los contenedores de funciones también se pueden compilar en scratch
, lo que les permite usarse en combinación con las actualizaciones de seguridad automáticas de Cloud Run.
pack
CLI
pack build IMAGE_NAME \
--builder LOCATION.pkg.dev/serverless-runtimes/google-22-full/builder/LANGUAGE:latest
--run-image LOCATION-docker.pkg.dev/serverless-runtimes/google-22/scratch/RUNTIME_ID:latest
Reemplaza lo siguiente:
LOCATION
por el nombre de la región de tu repositorio de contenedores, por ejemplo,us-west2
.IMAGE_NAME
por el nombre de la imagen de contenedorLANGUAGE
por el idioma de tu función, por ejemplo,nodejs
.RUNTIME_ID
por el ID del entorno de ejecución, por ejemplo,nodejs22
.
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
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 contenedorLANGUAGE
por el idioma de tu función, por ejemplo,nodejs
.RUNTIME_ID
por el ID del entorno de ejecución, por ejemplo,nodejs22
.
Próximos pasos
- Después de compilar el contenedor, puedes realizar pruebas locales antes de implementar en Cloud Run. Consulta Prueba un servicio de Cloud Run de forma local para obtener más información.
- Para comprender los requisitos y comportamientos clave de los contenedores en Cloud Run, consulta Contrato de contenedores.
- Para implementar en Cloud Run tus contenedores compilados, sigue los pasos de Implementa servicios.
- Para automatizar las compilaciones y las implementaciones de tus servicios de Cloud Run mediante activadores de Cloud Build, configura la implementación continua.
- Con el fin de realizar compilaciones de contenedores óptimas para la aplicación de Java, consulta Compila contenedores de Java con Jib.