Create an HTTP function

Revisar mi progreso

/ 10

Create a Cloud Storage function

Revisar mi progreso

/ 10

Create a Cloud Audit Logs function

Revisar mi progreso

/ 10

Create a VM instance

Revisar mi progreso

/ 10

Deploy different revisions

Revisar mi progreso

/ 20

Set up minimum instances

Revisar mi progreso

/ 20

Create a function with concurrency

Revisar mi progreso

/ 20

Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.

GSP1089

Labs de autoaprendizaje de Google Cloud

Descripción general

Cloud Run Functions es la oferta de funciones como servicio de Google Cloud. Incluye un conjunto de funciones avanzadas y está potenciada por Cloud Run y Eventarc, lo que permite ejercer un control más avanzado sobre el rendimiento y la escalabilidad, y mayor control sobre el entorno de ejecución de las funciones y los activadores de más de 90 fuentes de eventos.

En este lab, crearás funciones de Cloud Run que respondan a llamadas HTTP y se activen con eventos de Cloud Storage y Registros de auditoría de Cloud. También implementarás múltiples revisiones de funciones de Cloud Run y explorarás los nuevos parámetros de configuración.

Novedades

Esta nueva versión de Cloud Run Functions ofrece una experiencia de FaaS mejorada con la tecnología de Cloud Run, Cloud Build, Artifact Registry y Eventarc.

Infraestructura mejorada

  • Procesamiento más largo de solicitudes: Ejecuta tus funciones de Cloud Run por más de 5 minutos (el valor predeterminado), lo que facilita ejecutar cargas de trabajo basadas en solicitudes más largas, como procesar grandes flujos de datos desde Cloud Storage o BigQuery. El límite es de 60 minutos para las funciones de HTTP. Para las funciones controladas por eventos, actualmente es de hasta 10 minutos.
  • Instancias más grandes: Aprovecha hasta 16 GB de RAM y 4 CPU virtuales en funciones de Cloud Run, lo que permite cargas de trabajo más paralelas, de mayor tamaño en la memoria y de cómputo intensivo.
  • Simultaneidad: Procesa hasta 1,000 solicitudes simultáneas con una sola instancia de función, lo que minimiza los inicios en frío y mejora la latencia durante el escalamiento.
  • Instancias mínimas: Proporciona instancias preparadas con anterioridad para minimizar los inicios en frío y asegúrate de que el tiempo de arranque de la aplicación no afecte su rendimiento.
  • División del tráfico: Admite múltiples versiones de tus funciones, divide el tráfico entre ellas y reviértelas a una versión anterior.

Amplia cobertura de eventos y compatibilidad con CloudEvents

  • Integración de Eventarc: Cloud Run Functions ahora incluye compatibilidad nativa con Eventarc, que aporta más de 125 fuentes de eventos con Registros de auditoría de Cloud (BigQuery, Cloud SQL, Cloud Storage, etc.). Por supuesto, Cloud Run Functions sigue admitiendo eventos de fuentes personalizadas con la publicación directa en Cloud Pub/Sub.
  • Formato de CloudEvent: Todas las funciones controladas por eventos cumplen con CloudEvents (cloudevents.io), el estándar de la industria, sin importar la fuente, para garantizar que los desarrolladores tengan una experiencia coherente. Las cargas útiles se envían a través de un CloudEvent estructurado con una carga útil de cloudevent.data y se implementan con el estándar de CloudEvent.

Objetivos

En este lab, aprenderás a realizar las siguientes tareas:

  • Escribir una función que responda a llamadas HTTP
  • Escribir una función que responda a eventos de Cloud Storage
  • Escribir una función que responda a Registros de auditoría de Cloud
  • Implementar múltiples revisiones de una función de Cloud Run
  • Eliminar los inicios en frío con instancias mínimas
  • Configurar la simultaneidad

Configuración y requisitos

Antes de hacer clic en el botón Comenzar lab

Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.

Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.

Para completar este lab, necesitarás lo siguiente:

  • Acceso a un navegador de Internet estándar. Se recomienda el navegador Chrome.
Nota: Usa una ventana del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
  • Tiempo para completar el lab (recuerda que, una vez que comienzas un lab, no puedes pausarlo).
Nota: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.

Cómo iniciar tu lab y acceder a la consola de Google Cloud

  1. Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá un diálogo para que selecciones la forma de pago. A la derecha, se encuentra el panel Configuración del lab y acceso, que tiene los siguientes elementos:

    • El botón Abrir la consola de Google Cloud
    • Las credenciales temporales (nombre de usuario y contraseña) que debes usar para este lab
    • Otra información para completar el lab (si es necesaria)

    Ten en cuenta que el cronómetro del lab se encuentra cerca de la parte superior de la página y muestra el tiempo restante.

  2. Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).

    El lab inicia los recursos y abre otra pestaña, en la que se muestra la página de acceso.

    Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.

    Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usa otra cuenta.
  3. De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.

    {{{user_0.username | "Username"}}}

    También puedes encontrar el nombre de usuario en el panel Configuración del lab y acceso.

  4. Haz clic en Siguiente.

  5. Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.

    {{{user_0.password | "Password"}}}

    También puedes encontrar la contraseña en el panel Configuración del lab y acceso.

  6. Haz clic en Siguiente.

    Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia cuenta de Google Cloud para este lab podría generar cargos adicionales.
  7. Haz clic para avanzar por las páginas siguientes:

    • Acepta los Términos y Condiciones.
    • No agregues opciones de recuperación ni autenticación de dos factores, ya que esta cuenta es temporal.
    • No te registres para obtener pruebas gratuitas.

Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.

Nota: Para acceder a los productos y servicios de Google Cloud, haz clic en el menú de navegación o escribe el nombre del servicio o producto en el campo Buscar. Ícono del menú de navegación y campo de búsqueda

Activa Cloud Shell

Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.

  1. Haz clic en Activar Cloud Shell Ícono de Activar Cloud Shell en la parte superior de la consola de Google Cloud.

  2. Haz clic para avanzar por las siguientes ventanas:

    • Continúa en la ventana de información de Cloud Shell.
    • Autoriza a Cloud Shell para que use tus credenciales para realizar llamadas a la API de Google Cloud.

Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu Project_ID, . El resultado contiene una línea que declara el Project_ID para esta sesión:

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.

  1. Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
gcloud auth list
  1. Haz clic en Autorizar.

Resultado:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. Puedes solicitar el ID del proyecto con este comando (opcional):
gcloud config list project

Resultado:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Nota: Para obtener toda la documentación de gcloud, en Google Cloud, consulta la guía con la descripción general de gcloud CLI.

Tarea 1: Habilita las APIs

Antes de crear funciones de Cloud Run, debes habilitar las APIs correspondientes.

  • Ejecuta el siguiente comando para habilitar todos los servicios necesarios.
gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ pubsub.googleapis.com \ cloudquotas.googleapis.com \ monitoring.googleapis.com

Tarea 2: Crea una función de HTTP

La primera función que crearás será una función de Node.js (requiere autenticación) que responda a solicitudes HTTP y usarás un tiempo de espera de 10 minutos con el objetivo de demostrar cómo una función puede tener más tiempo para responder a dichas solicitudes.

Creación

  1. En la terminal de Cloud Shell, ejecuta el siguiente comando para crear la carpeta y los archivos de la aplicación, y navegar a la carpeta:
mkdir ~/hello-http && cd $_ touch index.js && touch package.json
  1. Haz clic en el botón Abrir editor de la barra de herramientas de Cloud Shell.

  2. Agrega el siguiente código al archivo hello-http/index.js que simplemente responde a las solicitudes HTTP:

const functions = require('@google-cloud/functions-framework'); functions.http('helloWorld', (req, res) => { res.status(200).send('HTTP with Node.js in GCF 2nd gen!'); });
  1. Agrega el siguiente contenido al archivo hello-http/package.json para especificar las dependencias.
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }

Implementación

  1. En la terminal de Cloud Shell, ejecuta el siguiente comando para implementar la función:
gcloud run deploy nodejs-http-function \ --source . \ --function helloWorld \ --base-image {{{project_0.startup_script.node_gcp_runtime | node_gcp_runtime}}} \ --region {{{project_0.default_region|Region}}} \ --timeout 600s \ --max-instances 1 \ --no-allow-unauthenticated Nota: Si ves un mensaje de error de permisos (permissions error), espera unos minutos y vuelve a realizar la implementación. Las APIs tardan unos minutos en habilitarse.

Las marcas que se usan en este comando incluyen las siguientes:

  • --source .: Indica a Cloud Run que compile la función en una imagen de contenedor con buildpacks.
  • --function helloWorld: Establece el punto de entrada de la función que se invocará.
  • --base-image {{{project_0.startup_script.node_gcp_runtime | node_gcp_runtime}}}: Especifica la imagen base del entorno de ejecución y habilita las actualizaciones automáticas de la imagen base para las correcciones de seguridad.
  • --timeout 600s: Permite que la función tenga un tiempo de espera más largo (600 segundos) para responder a las solicitudes HTTP.
  • --max-instances 1: Establece la cantidad máxima de instancias en 1.
  • --no-allow-unauthenticated: Garantiza que la función requiera autenticación.
  1. Una vez que se implemente la función, en el menú de navegación de la consola de Google Cloud, ve a Cloud Run y verifica que nodejs-http-function aparezca en la lista.

verifica que se haya implementado la función

Prueba

  1. En Cloud Shell, recupera la URL del servicio de tu función y almacénala en una variable de entorno:
SERVICE_URL="$(gcloud run services describe nodejs-http-function --region {{{project_0.default_region|Region}}} --format 'value(status.url)')"
  1. Pasa tu token de identidad en el encabezado de autorización para autenticarte y probar la función de HTTP:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL

Deberías ver el siguiente mensaje como respuesta:

HTTP with Node.js in GCF 2nd gen!

Haz clic en Revisar mi progreso para verificar el objetivo. Crea una función de HTTP

Tarea 3: Crea una función de Cloud Storage

En esta sección, crearás una función de Node.js que responda a eventos de un bucket de Cloud Storage con un activador de Eventarc.

Configuración

  • Ejecuta los siguientes comandos para otorgar los roles de IAM necesarios a las cuentas de servicio de Cloud Storage y Compute Engine:
PROJECT_NUMBER=$(gcloud projects list --filter="project_id:{{{ project_0.project_id | PROJECT_ID }}}" --format='value(project_number)') SERVICE_ACCOUNT=$(gcloud storage service-agent --project="$PROJECT_NUMBER" | xargs) gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/pubsub.publisher gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver

Creación

  1. Ejecuta el siguiente comando para crear la carpeta y los archivos de la aplicación, y navegar a la carpeta:
mkdir ~/hello-storage && cd $_ touch index.js && touch package.json
  1. Haz clic en el botón Abrir editor de la barra de herramientas de Cloud Shell.

  2. Agrega el siguiente código al archivo hello-storage/index.js, que simplemente responde a los eventos de Cloud Storage:

const functions = require('@google-cloud/functions-framework'); functions.cloudEvent('helloStorage', (cloudevent) => { console.log('Cloud Storage event with Node.js in GCF 2nd gen!'); console.log(cloudevent); });
  1. Agrega el siguiente contenido al archivo hello-storage/package.json para especificar las dependencias:
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }

Implementación

  1. Primero, ejecuta el siguiente comando y crea un bucket de Cloud Storage que se usará para generar eventos:
export BUCKET_NAME="gcf-gen2-storage-{{{ project_0.project_id | PROJECT_ID }}}" gcloud storage buckets create gs://$BUCKET_NAME --location={{{project_0.default_region|Region}}}
  1. Ejecuta el siguiente comando para implementar la función de Cloud Run:
gcloud run deploy nodejs-storage-function \ --source . \ --function helloStorage \ --base-image {{{project_0.startup_script.node_gcp_runtime | node_gcp_runtime}}} \ --region {{{project_0.default_region|Region}}} \ --max-instances 1 \ --no-allow-unauthenticated Nota: Como antes, si ves un mensaje de error de permisos (permissions error), espera unos minutos y vuelve a realizar la implementación. Las APIs pueden tardar unos minutos en habilitarse.
  1. Ahora, crea el activador de Eventarc para enrutar los eventos de creación de objetos de Cloud Storage a tu función implementada:
gcloud eventarc triggers create nodejs-storage-function-trigger \ --location={{{project_0.default_region|Region}}} \ --destination-run-service=nodejs-storage-function \ --destination-run-region={{{project_0.default_region|Region}}} \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
  1. Una vez que se implementen la función y el activador, verifica que puedas ver nodejs-storage-function en la consola de Cloud Run.

dos funciones

Prueba

  1. Ejecuta el siguiente comando para subir un archivo al bucket y probar la función:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET_NAME/random.txt
  1. Ejecuta el siguiente comando para leer los registros del servicio. Deberías ver el CloudEvent recibido en los registros:
gcloud run services logs read nodejs-storage-function \ --region {{{project_0.default_region|Region}}} --limit=100 Nota: Los registros pueden tardar un minuto en generarse.

Deberías ver un resultado similar al siguiente.

Resultado:

} traceparent: '00-c74cb472d1e78f7225b6f617a31d9c08-96f0380bb62be2c1-01' }, etag: 'CKOx1L3wofoCEAE=' crc32c: 'R1jUOQ==', mediaLink: 'https://storage.googleapis.com/download/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt?generation=1663625646643363&alt=media', md5Hash: '5Z/5eUEET4XfUpfhwwLSYA==', size: '12', timeStorageClassUpdated: '2022-09-19T22:14:06.657Z', storageClass: 'STANDARD', updated: '2022-09-19T22:14:06.657Z', timeCreated: '2022-09-19T22:14:06.657Z', contentType: 'text/plain', metageneration: '1', generation: '1663625646643363', bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', name: 'random.txt', selfLink: 'https://www.googleapis.com/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt', id: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/random.txt/1663625646643363', kind: 'storage#object', data: { bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', time: '2022-09-19T22:14:06.657124Z', subject: 'objects/random.txt', type: 'google.cloud.storage.object.v1.finalized', specversion: '1.0', source: '//storage.googleapis.com/projects/_/buckets/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', id: '5693030851428996', { Cloud Storage event with Node.js in GCF 2nd gen!

Haz clic en Revisar mi progreso para verificar el objetivo. Crea una función de Cloud Storage

Tarea 4: Crea una función de Registros de auditoría de Cloud

En esta sección, crearás una función de Node.js que recibirá un evento de Registros de auditoría de Cloud cuando se cree una instancia de VM de Compute Engine. Como respuesta, agregará una etiqueta a la VM recién creada, en la que se especifica el creador de la VM.

Determina las VMs de Compute Engine recién creadas

Compute Engine emite 2 registros de auditoría cuando se crea una VM.

El primero se emite al principio de la creación de la VM y se ve así:

registro de auditoría 1

El segundo se emite después de la creación de la VM y se ve así:

registro de auditoría 2

Observa el campo operation con los valores first: true y last: true. El segundo registro de auditoría contiene toda la información que necesitas para etiquetar una instancia, por lo que debes usar la marca last: true con el objetivo de detectarla en Cloud Run Functions.

Configuración

Si deseas usar las funciones de Registros de auditoría de Cloud, debes habilitar los registros de auditoría para Eventarc. También debes usar una cuenta de servicio con el rol eventarc.eventReceiver.

  1. En el menú de navegación, ve a IAM y administración > Registros de auditoría.
Nota: Puedes pasar por alto la advertencia sobre el permiso faltante resourcemanager.folders.getIamPolicy.
  1. Busca la API de Compute Engine y haz clic en la casilla de verificación junto a ella. Si no puedes encontrarla, búscala en la página siguiente.

  2. En el panel de información de la derecha, selecciona las casillas de verificación de los tipos de registro Lectura de administración, Lectura de datos y Escritura de datos. Luego, haz clic en Guardar.

marca Lectura de administración, Lectura de datos y Escritura de datos

  1. Otórgale a la cuenta de servicio predeterminada de Compute Engine el rol de IAM eventarc.eventReceiver:
gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver

Obtención del código

  1. Ejecuta el siguiente código para clonar el repo que contiene la aplicación:
cd ~ git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
  1. Haz clic en el botón Abrir editor de la barra de herramientas de Cloud Shell.

  2. En el Explorador de archivos, navega a eventarc-samples > gce-vm-labeler > gcf > nodejs y abre index.js.

El archivo index.js contiene el código de la aplicación que recibe el registro de auditoría envuelto en un CloudEvent. Luego, extrae los detalles de la instancia de VM de Compute Engine y establece una etiqueta en la instancia de VM. Puedes estudiar index.js con más detalle por tu cuenta.

Implementación

  1. En la terminal de Cloud Shell, ejecuta el siguiente comando para navegar al directorio de la aplicación:
cd ~/eventarc-samples/gce-vm-labeler/gcf/nodejs
  1. Ejecuta el siguiente comando para implementar la función de Cloud Run:
gcloud run deploy gce-vm-labeler \ --source . \ --function labelVmCreation \ --base-image {{{project_0.startup_script.node_gcp_runtime | node_gcp_runtime}}} \ --region {{{project_0.default_region|Region}}} \ --max-instances 1 \ --no-allow-unauthenticated
  1. Crea el activador de Eventarc para filtrar en los registros de auditoría las inserciones de instancias de Compute Engine:
gcloud eventarc triggers create gce-vm-labeler-trigger \ --location={{{project_0.default_region|Region}}} \ --destination-run-service=gce-vm-labeler \ --destination-run-region={{{project_0.default_region|Region}}} \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=compute.googleapis.com" \ --event-filters="methodName=beta.compute.instances.insert" \ --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com Nota: Aunque el activador de la función de registro de auditoría se crea de inmediato, los activadores pueden tardar hasta 10 minutos en ser completamente funcionales.

Haz clic en Revisar mi progreso para verificar el objetivo. Crea una función de Registros de auditoría de Cloud

Prueba

Para probar tu función de registro de auditoría, debes crear una VM de Compute Engine en la consola de Cloud (también puedes crear VMs con gcloud, pero no parece generar registros de auditoría).

  1. En el menú de navegación, ve a Compute Engine > Instancias de VM.

  2. Haz clic en Crear instancia y establece el Nombre de la instancia como instance-1 y la Zona como .

  3. Deja todos los otros campos con sus valores predeterminados y haz clic en Crear.

Una vez que se complete la creación de la VM, deberías ver la etiqueta creator agregada en la VM en la consola de Cloud en la sección Información básica.

etiqueta creator

  1. Verifica la creación de la instancia con el siguiente comando:
gcloud compute instances describe instance-1 --zone {{{project_0.default_zone | "Zone"}}}

Deberías ver la etiqueta en el resultado como en el siguiente ejemplo.

Ejemplo del resultado:

... labelFingerprint: ULU6pAy2C7s= labels: creator: student-02-19b599a0f901 ...

Haz clic en Revisar mi progreso para verificar el objetivo. Crea una instancia de VM

  1. Ejecuta el siguiente comando para borrar la VM: Cuando se te solicite, escribe Y para confirmar.
gcloud compute instances delete instance-1 --zone {{{project_0.default_zone | "Zone"}}}

Tarea 5: Implementa diferentes revisiones

Cloud Run Functions admite múltiples revisiones de tus funciones, lo que permite dividir el tráfico entre ellas o revertir funciones a una versión anterior. En esta sección, implementarás dos revisiones de tu función de Cloud Run.

Creación

  1. Ejecuta el siguiente comando para crear la carpeta y los archivos de la aplicación, y navegar a la carpeta:
mkdir ~/hello-world-colored && cd $_ touch main.py touch requirements.txt
  1. Agrega el siguiente código al archivo hello-world-colored/main.py con una función de Python que lee una variable de entorno de color y responde con Hello World en ese color de fondo:
import os color = os.environ.get('COLOR') def hello_world(request): return f'<body style="background-color:{color}"><h1>Hello World!</h1></body>'

Implementación

  1. Ejecuta el siguiente comando para implementar la primera revisión de la función con un fondo naranja:
COLOR=orange gcloud run deploy hello-world-colored \ --source . \ --function hello_world \ --base-image python311 \ --region {{{project_0.default_region|Region}}} \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR \ --max-instances 1

En este punto, si pruebas la función abriendo la URL del servicio (el URI que se generó con el comando de implementación que ejecutaste antes) en tu navegador, deberías ver Hello World con un fondo naranja:

hello world naranja

  1. Navega a la página de Cloud Run en la consola y haz clic en el servicio hello-world-colored.

  2. Haz clic en Editar e implementar una nueva revisión.

  3. Deja todo con sus valores predeterminados, desplázate hacia abajo y selecciona la pestaña Variables y secretos. En la sección Variables de entorno, actualiza COLOR a yellow (amarillo).

revisión de funciones

  1. Haz clic en Implementar.

Como esta es la revisión más reciente, si pruebas la función abriendo la URL del servicio en tu navegador, deberías ver Hello World con un fondo amarillo:

hello world amarillo

Haz clic en Revisar mi progreso para verificar el objetivo. Implementa diferentes revisiones

Tarea 6: Configura una cantidad mínima de instancias

En Cloud Run Functions, se puede especificar una cantidad mínima de instancias de función que se deben mantener en espera y listas para entregar solicitudes. Esto es útil para limitar la cantidad de inicios en frío. En esta sección, implementarás una función con una inicialización lenta. Observarás el problema de inicio en frío. Luego, implementarás la función con el valor de instancia mínimo establecido en 1 para deshacerte del inicio en frío.

Creación

  1. Ejecuta el siguiente comando para crear la carpeta y los archivos de la aplicación, y navegar a la carpeta:
mkdir ~/min-instances && cd $_ touch main.go touch go.mod
  1. Agrega el siguiente código al archivo min-instances/main.go. Este servicio de Go tiene una función init que provoca una suspensión durante 10 segundos para simular una inicialización larga. También tiene una función HelloWorld que responde a las llamadas HTTP:
package p import ( "fmt" "net/http" "time" ) func init() { time.Sleep(10 * time.Second) } func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Slow HTTP Go in GCF 2nd gen!") }
  1. Agrega el siguiente código al archivo min-instances/go.mod para especificar la ruta de acceso al módulo y la versión del lenguaje Go:
module example.com/mod go 1.26

Implementación

  1. Ejecuta el siguiente comando para implementar la primera revisión de la función con el valor de instancia mínimo predeterminado de cero:
gcloud run deploy slow-function \ --source . \ --function HelloWorld \ --base-image go126 \ --region {{{project_0.default_region|Region}}} \ --allow-unauthenticated \ --max-instances 4
  1. Prueba la función con estos comandos:
SLOW_URL="$(gcloud run services describe slow-function --region {{{project_0.default_region|Region}}} --format 'value(status.url)')" curl $SLOW_URL

Deberías observar un retraso de 10 segundos (inicio en frío) en la primera llamada y, luego, ver el mensaje. Las llamadas posteriores deberían devolverse de inmediato:

Slow HTTP Go in GCF 2nd gen!

Establecimiento del mínimo de instancias

Para deshacerte del inicio en frío en la primera solicitud, vuelve a implementar la función con la marca --min-instances establecida en 1 de la siguiente manera:

  1. Navega a la página Cloud Run en la consola y haz clic en el servicio slow-function.

  2. Haz clic en Editar e implementar una nueva revisión.

  3. En la sección Escalamiento de revisión, establece Cantidad mínima de instancias en 1 y Cantidad máxima de instancias en 4.

  4. Deja el resto de los campos con los valores predeterminados y haz clic en Implementar.

Prueba

  • Ejecuta el siguiente comando para probar la función nuevamente:
curl $SLOW_URL

Ya no deberías ver la demora de 10 segundos en la primera solicitud. El problema de inicio en frío para la primera invocación (después de mucho tiempo sin invocar) desapareció gracias a la cantidad mínima de instancias. Consulta la documentación sobre cómo usar una cantidad mínima de instancias para obtener más información.

Haz clic en Revisar mi progreso para verificar el objetivo. Configura una cantidad mínima de instancias

Tarea 7: Crea una función con simultaneidad

En Cloud Run Functions, una instancia de función maneja una solicitud simultánea de forma predeterminada, pero puedes especificar la cantidad de solicitudes simultáneas que una instancia puede procesar de forma simultánea. También puede resultar útil para evitar los inicios en frío, ya que no es necesario crear una nueva instancia de función para cada solicitud paralela.

En esta sección, usarás la función con inicialización lenta del paso anterior. Enviarás 10 solicitudes y observarás el problema de inicio en frío nuevamente, ya que se deben crear nuevas instancias de función para controlar las solicitudes.

Para solucionar el problema de inicio en frío, implementarás otra función con un valor de simultaneidad de 100. Notarás que las 10 solicitudes ahora no causan el problema de inicio en frío y una sola instancia de función puede controlar todas las solicitudes.

Prueba sin simultaneidad

  1. Usa el siguiente comando para instalar hey en Cloud Shell:
sudo apt install hey
  1. Ejecuta el siguiente comando para obtener la URL de la función y guardarla como una variable de entorno:
SLOW_URL=$(gcloud run services describe slow-function --region {{{project_0.default_region|Region}}} --format="value(status.url)")
  1. Usa una herramienta de comparativa de código abierto llamada hey para enviar 10 solicitudes simultáneas a la función lenta:
hey -n 10 -c 10 $SLOW_URL

Deberías ver en el resultado de hey que algunas solicitudes tardan mucho.

Resultado:

Summary: Total: 10.9053 secs Slowest: 10.9048 secs Fastest: 0.4439 secs Average: 9.7930 secs Requests/sec: 0.9170 Total data: 310 bytes Size/request: 31 bytes Response time histogram: 0.444 [1] |■■■■ 1.490 [0] | 2.536 [0] | 3.582 [0] | 4.628 [0] | 5.674 [0] | 6.720 [0] | 7.767 [0] | 8.813 [0] | 9.859 [0] | 10.905 [9] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

La tardanza se debe a que se están creando más instancias de funciones para manejar las solicitudes. Si verificas el número de instancias activas de la función, también deberías notar que se creó más de una instancia en algún momento y que estas causan el problema de inicio en frío.

gráfico de instancias activas

  1. Ejecuta el siguiente comando para borrar la función. Cuando se te solicite, escribe Y para confirmar:
gcloud run services delete slow-function --region {{{project_0.default_region | "Region"}}}

Implementación

  • Ejecuta el siguiente comando para implementar una nueva función idéntica a la anterior. Una vez implementada, aumenta su simultaneidad:
gcloud run deploy slow-concurrent-function \ --source . \ --function HelloWorld \ --base-image go126 \ --region {{{project_0.default_region|Region}}} \ --allow-unauthenticated \ --min-instances 1 \ --max-instances 4

Configuración de la simultaneidad

Ahora, establece la simultaneidad del servicio subyacente de Cloud Run para la función en 100 (puede ser un máximo de 1,000). Así, garantizarás que una sola instancia de función pueda controlar al menos 100 solicitudes.

  1. En el menú de navegación, ve a Cloud Run.

  2. Haz clic en el servicio slow-concurrent-function.

  3. Haz clic en Editar e implementar una nueva revisión.

  4. En la sección Recursos, establece la CPU en 1.

  5. En Solicitudes, establece la Cantidad máxima de solicitudes simultáneas por instancia en 100.

  6. En Escalamiento de revisión, establece la Cantidad máxima de instancias en 4.

  7. Deja el resto de los campos con los valores predeterminados y haz clic en Implementar.

Prueba con simultaneidad

  1. Una vez que se implemente tu función, ejecuta el siguiente comando para obtener la URL de la nueva función y guardarla como una variable de entorno:
SLOW_CONCURRENT_URL=$(gcloud run services describe slow-concurrent-function --region {{{project_0.default_region|Region}}} --format="value(status.url)")
  1. Ahora usa hey para enviar 10 solicitudes simultáneas:
hey -n 10 -c 10 $SLOW_CONCURRENT_URL

Deberías ver en el resultado de hey que todas las solicitudes se procesan rápidamente.

Resultado:

Summary: Total: 0.0652 secs Slowest: 0.0651 secs Fastest: 0.0619 secs Average: 0.0636 secs Requests/sec: 153.3751 Total data: 280 bytes Size/request: 28 bytes Response time histogram: 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.063 [0] | 0.063 [0] | 0.063 [0] | 0.063 [1] |■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.065 [0] | 0.065 [1] |■■■■■■■■■■■■■■■■■■■■

Una sola instancia de función pudo manejar todas las solicitudes y el problema de inicio en frío desapareció gracias al aumento de la simultaneidad. Consulta la documentación sobre simultaneidad para obtener más información.

Haz clic en Revisar mi progreso para verificar el objetivo. Crea una función con simultaneidad

¡Felicitaciones!

En este lab, implementaste varias funciones de Cloud Run que respondieron a llamadas HTTP, eventos de Cloud Storage y Registros de auditoría de Cloud. Luego, implementaste varias revisiones de los servicios de Cloud Run que ejecutan las funciones y estableciste valores de simultaneidad, además de deshacerte de los inicios en frío con instancias mínimas.

Próximos pasos y más información

Para obtener más información sobre Cloud Run Functions, explora los siguientes recursos:

Capacitación y certificación de Google Cloud

Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.

Última actualización del manual: 19 de agosto de 2026

Prueba más reciente del lab: 19 de agosto de 2026

Copyright 2026 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto

Este contenido no está disponible en este momento

Te enviaremos una notificación por correo electrónico cuando esté disponible

¡Genial!

Nos comunicaremos contigo por correo electrónico si está disponible

Un lab a la vez

Confirma para finalizar todos los labs existentes y comenzar este

Usa la navegación privada para ejecutar el lab

Usar una ventana de incógnito o de navegación privada es la mejor forma de ejecutar este lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.