Soluciona problemas con Gemini CodeLab

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 la CLI de gcloud 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 para 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 centraremos 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 la consola de Cloud.

2. Selecciona un proyecto de Google Cloud con el que planeas trabajar en este lab.

22170459a4f3ba59.png

3. Abre la página 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).

9d27c844c16ad3e4.png

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

35f23e52875b26cd.png

Haz clic en el botón Crear función en la parte superior de la lista de funciones 34b5e7e36f4e48e9.png

Si no usaste Cloud Functions en este proyecto antes, se te pedirá que habilites las APIs de Google para poder trabajar.

5b7978521d6f56f7.png

Haz clic en HABILITAR para continuar.

4. Define las propiedades básicas de la nueva Cloud Function.

  • Establece el nombre en "codelab-cf".
  • Selecciona la opción Permitir invocaciones no autenticadas.

6a2aaf9bedd161d9.png

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

f4e76470dbdf6854.png

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

1ad7bf15c07eda49.png

Configura el entorno de ejecución y el código de Cloud Functions

En este codelab, se usa Python como lenguaje de programación. No te preocupes si no estás familiarizado con 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.

9a3cd8bf272b4d02.png

Ten en cuenta que el cambio de entorno de ejecución modifica el código fuente que se muestra en el editor intercalado.

6. Copia el siguiente código en el editor intercalado 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 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 muestra 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 Cloud Functions, haz clic en IMPLEMENTAR en la parte inferior izquierda.

17c4828702a32cd9.png

Es posible que debas esperar unos minutos hasta que se complete el proceso de implementación. Si seguiste las instrucciones de configuración de cerca, deberías ver que la implementación falló.

3. Cómo encontrar y resolver el problema

En esta sección, usarás la función Explicaciones de registros y otra asistencia de Gemini para identificar el problema y la forma de resolverlo.

1. La implementación falla. 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.

bc62db6ef3b35420.png

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.

e24856920201ebf8.png

2. Revisa los registros en la pestaña abierta. Ten en cuenta que los resúmenes de registros se ven como varias líneas de la pila de llamadas 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.

b49e41594173b57c.png

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. Si haces clic en ellos, puedes copiar toda la información sobre el registro, expandir todos los campos para mostrar todos los datos de la entrada de registro y explicar la entrada de registro con Gemini.

4. La pila de llamadas de excepción no es muy informativa. 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 de registro dice lo siguiente:

functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...

Parece 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.

b815de46d1b4597c.png

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

7ca90e087a2e99d1.png

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 solicitud 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 está clara, pídele a Gemini que proporcione más información con una de las siguientes indicaciones o crea 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, pregúntale a Gemini lo siguiente:

¿Cómo 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 y la redacción y el formato de tu solicitud. 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.

c3d9b207214a2240.png

8. Confirma que la autenticación aún esté configurada en Permitir invocaciones no autenticadas y actualiza la selección si es necesario.

6a2aaf9bedd161d9.png

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.

Después de terminar la edición, haz clic en IMPLEMENTAR.

Es posible que debas esperar unos 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 la consola puede seguir mostrándote el último mensaje de error hasta que se complete el proceso de implementación.

10. Para verificar que Cloud Functions esté operativa, envía la siguiente solicitud HTTPS con curl. Puedes usar Cloud Shell o hacerlo desde cualquier terminal que tenga instaladas la CLI 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 Cloud Functions activadas 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 Cloud Functions que se encuentra sobre el editor intercalado a la derecha del campo Entorno de ejecución:

9a3cd8bf272b4d02.png

Cambiar el punto de entrada de hello_http a get_order_list resolverá el problema con la implementación.

4. Limpieza

Para realizar la limpieza, 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 con tu aplicación y ahora comprendes cómo puede ayudarte a comprender los registros y obtener respuestas a preguntas sobre Google Cloud.

Documentos de referencia