Cloud Run permite desplegar funciones directamente, pero también puedes compilar tu función en una imagen de contenedor con los paquetes de compilación de Google Cloud y, a continuación, desplegar esta imagen de contenedor en Cloud Run.
Estos son algunos casos prácticos habituales para crear funciones en un contenedor:
- Integración y entrega continuas: los desarrolladores crean y envían código de función a un repositorio de origen. Un sistema de CI/CD compila automáticamente la función en un contenedor, ejecuta pruebas y la despliega automáticamente en un entorno de staging.
- Infraestructura como código: los recursos de Cloud Run que se gestionan con YAML o Terraform hacen referencia a una URL de imagen de contenedor. El código de función escrito por los desarrolladores debe compilarse en una imagen de contenedor.
En esta página se explica cómo puedes replicar el proceso de compilación exacto de las funciones de Cloud Run de dos formas:
- Usar la CLI de
pack
- Usar Cloud Build como 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 Functions Framework.
Define la variable de entorno
GOOGLE_FUNCTION_TARGET
con el nombre de la función que uses 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"
Sustituye ENTRY_POINT por el método de la función.
Para obtener información sobre cómo usar variables de entorno con funciones de Cloud Run, consulta Configurar servicios de funciones de Cloud Run.
Constructores
Las funciones de Cloud Run se basan en imágenes base que se mantienen y publican en los buildpacks de Google Cloud.
Los compiladores son imágenes que constan de paquetes de compilación y paquetes de sistemas operativos (también conocidos como pilas). Los compiladores se usan para convertir el código fuente de tu función en un contenedor en ejecución.
Puedes elegir entre la lista de compiladores de paquetes de compilación de Google Cloud compatibles.
Desarrollar con pack
Pack
es una herramienta de CLI que mantiene el proyecto CNB para admitir el uso de paquetes de compilación. Usa la CLI de pack
para compilar tus funciones de forma local en una imagen de contenedor.
Antes de empezar
- Instala Docker Community Edition (CE)
en tu estación de trabajo.
pack
usa Docker como compilador de imágenes OCI. - Instala Pack CLI.
- Instala la herramienta de control de versiones de Git para obtener la aplicación de ejemplo de GitHub.
Crear una función de forma local
Usa el comando pack build
y especifica el compilador predeterminado --builder=gcr.io/buildpacks/builder
para compilar tus imágenes de contenedor de forma local.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
Sustituye IMAGE_NAME por el nombre de tu imagen de contenedor.
También puedes personalizar tu imagen de contenedor ampliando las imágenes de compilación y ejecución.
Compilar una función de ejemplo de forma local
En los siguientes ejemplos se muestra cómo compilar un ejemplo de forma local.
- Clona el repositorio de ejemplo en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Cambia al directorio que contiene el código de ejemplo 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 crear la función de ejemplo: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 la función en ejecución accediendo a localhost:8080.
Compilación con un sistema de compilación remoto
Usa Cloud Build para compilar tu función en una imagen de contenedor y Artifact Registry como repositorio de contenedores para almacenar y desplegar cada imagen.
Antes de empezar
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Asegúrate de que tu proyecto Google Cloud tiene acceso a un repositorio de imágenes de contenedor.
Para configurar el acceso a un repositorio de Docker en Artifact Registry, sigue estos pasos:
- Crea un repositorio de Docker en la misma ubicación que tu Google Cloud proyecto.
Reemplazar:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAME
por el nombre que elijas para tu repositorio de Docker.REGION
con la ubicación del proyecto o la más cercana. Google CloudDESCRIPTION
con la descripción que quieras.
Por ejemplo, para crear un repositorio
docker
enus-west2
con la descripción "Repositorio de Docker", ejecuta el siguiente comando:gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- Verifica que se ha creado el repositorio:
gcloud artifacts repositories list
Debería ver el nombre que elija para su repositorio de Docker en la lista.
- Crea un repositorio de Docker en la misma ubicación que tu Google Cloud proyecto.
LOCATION
por el nombre de la región de tu repositorio de contenedor (por ejemplo,us-west2
).PROJECT_ID
por el ID de tu Google Cloud proyecto.REPO_NAME
con el nombre de tu repositorio de Docker.IMAGE_NAME
con el nombre de tu imagen de contenedor.- Crea un archivo YAML llamado
cloudbuild.yaml
que incluya el URI de tu repositorio de imágenes de contenedor. LOCATION
con el nombre de la región de tu repositorio de contenedores (por ejemplo,us-west2
).PROJECT_ID
por el ID de tu Google Cloud proyecto.REPO_NAME
con el nombre de tu repositorio de Docker.IMAGE_NAME
con el nombre de tu imagen de contenedor.Compila la aplicación.
Si has llamado
cloudbuild.yaml
al archivo de configuración, puedes ejecutar el siguiente comando:gcloud builds submit .
- Clona el repositorio de ejemplo en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Cambia al directorio que contiene el código de ejemplo 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
Sustituye:
LOCATION
con el nombre de la región de tu repositorio de contenedores. Ejemplo:us-west2-docker.pkg.dev
PROJECT_ID
por el ID de tu Google Cloud proyecto.REPO_NAME
con el nombre de tu repositorio de Docker.
-
Comprueba que la función de ejemplo se haya publicado correctamente en
REPO_NAME
:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
Sustituye:
LOCATION
con el nombre de la región de tu repositorio de contenedores (por ejemplo,us-west2
).PROJECT_ID
por el ID de tu Google Cloud proyecto.REPO_NAME
con el nombre de tu repositorio de Docker.
LOCATION
con el nombre de la región de tu repositorio de contenedores (por ejemplo,us-west2
).IMAGE_NAME
con el nombre de tu imagen de contenedor.LANGUAGE
con el idioma de tu función, por ejemplo,nodejs
.RUNTIME_ID
con el ID de tiempo de ejecución, por ejemplo,nodejs22
.LOCATION
con el nombre de la región de tu repositorio de contenedores (por ejemplo,us-west2
).PROJECT_ID
por el ID de tu Google Cloud proyecto.REPO_NAME
con el nombre de tu repositorio de Docker.IMAGE_NAME
con el nombre de tu imagen de contenedor.LANGUAGE
con el idioma de tu función, por ejemplo,nodejs
.RUNTIME_ID
con el ID de tiempo de ejecución, por ejemplo,nodejs22
.- Una vez que hayas compilado tu función en un contenedor, pruébala localmente antes de desplegarla en Cloud Run. Consulta Probar un servicio de Cloud Run de forma local para obtener más información.
- Para desplegar los contenedores compilados en Cloud Run, sigue las instrucciones de Desplegar servicios.
- Para automatizar las compilaciones y los despliegues de tus servicios de Cloud Run con activadores de Cloud Build, consulta Configurar el despliegue continuo.
Crear una función de forma remota
Usa el comando gcloud builds submit
para compilar y subir tu imagen de contenedor al repositorio.
Puedes especificar la imagen del contenedor en el propio comando o usar un archivo de configuración.
Crear con comandos
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
Sustituye:
Ejemplo:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo
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 y simplificar 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 utilice la CLI de 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
Sustituye:
Ejemplo: crear 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 de contenedor se ha enviado a tu repositorio en Artifact Registry.
Crear una función para actualizar automáticamente la imagen base
Los contenedores de funciones también se pueden compilar en scratch
, lo que permite usarlos en combinación con las actualizaciones de seguridad automáticas de Cloud Run.
Dockerfile
Puedes usar tu cadena de herramientas de compilación para crear una imagen de contenedor de funciones que sea compatible con las actualizaciones automáticas de la imagen base. Consulta las instrucciones sobre cómo crear un contenedor desde cero.
pack
CLI
pack build 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
Sustituye:
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
Sustituye: