1. Introducción
En este lab, usarás Gemini, un colaborador potenciado por IA en Google Cloud, para solucionar un problema con la implementación de Cloud Functions. Para ello, analizarás los registros de errores, identificarás la causa raíz del problema y descubrirás cómo solucionarlo.
Actividades
- Usarás la terminal de Cloud Shell y gcloud CLI para configurar el entorno, lo que incluye habilitar las APIs de Google pertinentes y crear una Cloud Function a partir del código proporcionado.
- Usarás el resumen de registros de Cloud Logging para generar resúmenes de registros y comprender la información capturada.
- Chatearás con Gemini para obtener asistencia y solucionar el problema.
Qué aprenderás
- Cómo usar Gemini con Google Cloud Observability y para solucionar problemas
- Cómo encontrar y comprender los registros de Cloud Functions con la ayuda de Gemini
Requisitos
- Navegador web Chrome
- Un proyecto de Google Cloud con la facturación habilitada.
- Una Cuenta de Google con permisos de acceso al proyecto que te permitan habilitar APIs y manipular recursos
Este lab está dirigido a ingenieros de DevOps y de plataformas, y a desarrolladores de software de todos los niveles, incluidos los principiantes. Nos enfocaremos en obtener experiencia práctica con las capacidades de Gemini para solucionar problemas.
2. Configuración
En esta sección, se explica todo lo que debes hacer para comenzar este lab.
Configura el entorno
1. Abre https://console.cloud.google.com para acceder a Cloud Console.
2. Selecciona un proyecto de Google Cloud con el que planees trabajar en este lab.

3. Abre la página de Cloud Functions en la consola. Para ello, selecciona Cloud Functions en el menú de navegación (ícono ☰ en la parte superior izquierda de la ventana de la consola).

También puedes buscar "Cloud Functions" en el área de búsqueda de la consola:

Haz clic en el botón Crear función que se encuentra en la parte superior de la lista de funciones. 
Si no usaste Cloud Functions en este proyecto antes, se te pedirá que habilites las APIs de Google para poder trabajar.

Haz clic en HABILITAR para continuar.
4. Define las propiedades básicas de la nueva Cloud Function.
- Establece el nombre como "
codelab-cf". - Selecciona la opción Permitir invocaciones no autenticadas.

Para completar el paso, haz clic en el botón SIGUIENTE en el área inferior izquierda de la ventana:

Después de hacer clic en SIGUIENTE, es posible que se te solicite que habilites APIs de Google adicionales. Al igual que en el paso 4, haz clic en HABILITAR.

Configura el tiempo de ejecución y el código de la Cloud Function
En este codelab, se usa Python como lenguaje de programación. No te preocupes si no conoces Python. Para completar este codelab, no necesitarás conocimientos de Python.
5. Selecciona Python 3.11 como el entorno de ejecución de la función

Ten en cuenta que el cambio de tiempo de ejecución modifica el código fuente que se muestra en el editor directo.
6. Copia el siguiente código en el editor directo para modificar el ejemplo de inicio rápido generado automáticamente.
from google.cloud import storage
import json
import re
client = storage.Client()
def get_object_list(request):
if request.args and 'path' in request.args:
path = request.args['path']
else:
return '{}'
parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
bucket, prefix = parsed.group(1), parsed.group(2)
blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
objects = []
if (blobs):
for blob in blobs:
objects.append(blob.name)
return json.dumps(objects)
Este código lee el atributo path de la solicitud GET, analiza la ruta de acceso para seleccionar el nombre del bucket y llama a la API de Google Cloud Storage para obtener una lista de los objetos almacenados en esta ruta de acceso. La función (get_object_list) acepta una solicitud que es un objeto de Flask como argumento de entrada y devuelve los nombres de los objetos como un array JSON.
7. Selecciona el archivo requirements.txt de la lista de archivos que quedan en el editor intercalado. Para reemplazar la lista actual de dependencias por la nueva, copia el siguiente código en el editor intercalado.
google-cloud-storage
8. Para implementar la Cloud Function, haz clic en IMPLEMENTAR en la parte inferior izquierda.

Es posible que debas esperar un par de minutos hasta que se complete el proceso de implementación. Si seguiste las instrucciones de configuración con atención, deberías ver que la implementación se informa como fallida.
3. Cómo encontrar y resolver el problema
En esta sección, usarás la función Explicaciones de registros y otras herramientas de asistencia de Gemini para identificar el problema y la forma de resolverlo.
1. Falla la implementación. Deberías ver un mensaje de error que te informe sobre esto con información adicional y una opción para ver los registros de implementación. Haz clic en VER REGISTROS para ver los registros de la implementación.

TEN EN CUENTA que los registros de implementación se abrirán en una pestaña independiente en el mismo navegador. Deberás navegar entre las pestañas para completar este codelab.
TEN EN CUENTA que es posible que no veas líneas de registro cuando hagas clic en VER REGISTROS o que solo veas un par de líneas. En ese caso, usa el selector de rango de tiempo en el panel de consultas del Explorador de registros y selecciona Últimos 30 minutos.

2. Revisa los registros en la pestaña que se abrió. Ten en cuenta que los resúmenes de registros se ven como varias líneas del registro de pila de la excepción. Esto se debe a que Cloud Functions captura el texto impreso en stdout o stderr y escribe cada línea como una entrada de registro independiente. Otras líneas de registro resumen información sobre el código de error de salida, así como información adicional que informan las APIs de Cloud Functions y Cloud Run.

Puedes hacer clic en cualquiera de las líneas para ver más información sobre un registro en particular. Los registros expandidos tienen elementos adicionales de la IU en los que puedes hacer clic para copiar toda la información sobre el registro, expandir todos los campos para mostrar todos los datos de la entrada del registro y explicar la entrada del registro con Gemini.
4. El registro de pila de excepciones no es muy informativo. Revisa los registros para encontrar el final del registro de seguimiento de pila de la excepción. Es la línea que dice "Container called exit(1)". El siguiente resumen del registro dice:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
Parece ser un buen candidato para la investigación. Haz clic en esta línea para expandir la entrada de registro. Luego, haz clic en el botón “Explica esta entrada de registro” para ver información adicional sobre el registro seleccionado.

Si Gemini no se usó anteriormente en este proyecto, se te solicitará que habilites una API obligatoria. Si se te solicita habilitar la API, haz clic en HABILITAR para continuar.

TEN EN CUENTA que, en ocasiones, es posible que recibas un error cuando le pidas algo a Gemini. En ese caso, repite la operación de instrucción una vez más para obtener la respuesta. Por ejemplo, vuelve a hacer clic en el botón “Explica esta entrada de registro”.
5. Revisa la explicación que proporciona Gemini. Si la explicación proporcionada no es suficiente o no es clara, pídele a Gemini que proporcione más información con una de las siguientes instrucciones o redacta tu propia pregunta.
¿Puedes proporcionar más información sobre este registro?
¿Puedes proporcionar más información sobre el error?
6. Luego, pídele a Gemini sugerencias para resolver el problema. Por ejemplo, pídele a Gemini
¿Cómo puedo resolver este problema?
Sugerir una solución para resolver este error
Sugerir cómo puedo corregir este error
La respuesta de Gemini puede variar según el contexto actual, así como la redacción y el formato de tu instrucción. Se espera que Gemini recomiende asegurarse de que el código fuente de Cloud Functions tenga una función con el nombre hello_http.
7. Actualmente, ves la pestaña que muestra los registros de Cloud Functions. Selecciona la pestaña anterior que muestra la página de implementación de Cloud Functions con el error y haz clic en EDITAR.

8. Confirma que la autenticación siga configurada como Permitir invocaciones no autenticadas y actualiza la selección si es necesario.

9. Haz clic en SIGUIENTE en la parte inferior para ver el editor intercalado. Sigue la recomendación de Gemini y cambia el nombre de la función de get_order_list a hello_http.
Cuando termines de editar, haz clic en IMPLEMENTAR.
Es posible que debas esperar un par de minutos hasta que se complete el proceso de implementación. Confirma que la implementación se complete correctamente y que no aparezcan mensajes de error.
TEN EN CUENTA que es posible que la consola siga mostrando el último mensaje de error hasta que se complete el proceso de implementación.
10. Envía la siguiente solicitud HTTPS con curl para verificar que la Cloud Function esté operativa. Puedes usar Cloud Shell o hacerlo desde cualquier terminal que tenga instaladas las CLIs de curl y gcloud.Para ello, ejecuta el siguiente comando desde la terminal de Cloud Shell.
curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
TEN EN CUENTA que, para ejecutar este comando desde una terminal, deberás autenticarte con la CLI de gcloud y establecer el valor del ID de tu proyecto en la variable de entorno GOOGLE_CLOUD_PROJECT.
Bonificación
El nombre de la función hello_http se definió como un punto de entrada predeterminado para la Cloud Function activada por HTTP cuando se seleccionó el entorno de ejecución de Python. Una solución alternativa puede ser mantener get_order_list como el nombre de la función en el código fuente y actualizar el campo de punto de entrada de la Cloud Function que se encuentra sobre el editor directo a la derecha del campo Tiempo de ejecución:

Cambiar el punto de entrada de hello_http a get_order_list resolverá el problema con la implementación.
4. Limpieza
Para limpiar, puedes cerrar el proyecto o borrar la instancia de Cloud Functions. Puedes borrar Cloud Functions con la consola o con el comando de la CLI como se muestra a continuación:
gcloud functions delete codelab-cf --region=us-central1
5. ¡Felicitaciones!
¡Felicitaciones! Usaste correctamente Gemini para solucionar el problema de tu aplicación y ahora comprendes cómo puede ayudarte a entender los registros y obtener respuestas a preguntas sobre Google Cloud.