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 Function. Para ello, analizarás 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 relevantes 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 de Gemini 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 Function 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 permita habilitar las 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. Para acceder a la consola de Cloud, abre https://console.cloud.google.com.

2. Selecciona un proyecto de Google Cloud con el que planees 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 de la parte superior izquierda syslog 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 anteriormente en este proyecto, para poder trabajar, se te pedirá que habilites las APIs de Google.

5b7978521d6f56f7.png

Haz clic en HABILITAR para continuar.

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

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

6a2aaf9bedd161d9.png

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

f4e76470dbdf6854.png

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

1ad7bf15c07eda49.png

Configura el entorno 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 estás familiarizado con Python. Para completar este codelab, no necesitas tener 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 directo.

6. Copia el siguiente código en el editor directo para modificar el ejemplo de inicio rápido de generación automática.

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 recoger 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 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 directo. Reemplaza la lista actual de dependencias por la nueva copiando el siguiente código en el editor directo.

google-cloud-storage

8. Para implementar Cloud Function, haz clic en IMPLEMENTAR en la parte inferior izquierda.

17c4828702a32cd9.png

Es posible que debas esperar un par de minutos hasta que se complete el proceso de implementación. Si seguiste atentamente las instrucciones de configuración, es probable que veas un informe con errores en la implementación.

3. Encontrar y resolver el problema

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

1. La implementación falla. Deberías ver un mensaje de error informándote esto con información adicional y una opción para ver los registros de implementación. Haz clic en VER REGISTROS (VIEW LOGS) para ver los registros de la implementación.

bc62db6ef3b35420.png

NOTA que los registros de implementación se abrirán en una pestaña separada en el mismo navegador. Deberás navegar entre las pestañas para completar este codelab.

NOTA que es posible que no veas líneas de registro cuando hagas clic en VER REGISTROS o solo veas algunas líneas. En ese evento, usa el selector de intervalo de tiempo en el panel de consulta 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 la Cloud Function captura el texto impreso en stdout o stderr y escribe cada línea como una entrada de registro independiente. En otras líneas de registro, se resume la información sobre el código de error de salida, así como la información adicional que informan Cloud Functions y las APIs de 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 de IU adicionales en los que hacen clic, lo que te permite copiar toda la información sobre el registro, expandir todos los campos para mostrar todos los datos de la entrada de registro y explicarla usando Gemini.

4. La pila de llamadas de excepción no brinda mucha información. 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 vínculo "Explain this log input". 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 necesaria. Si se te solicita que habilites la API, haz clic en HABILITAR para continuar.

7ca90e087a2e99d1.png

NOTA que, en ocasiones, es posible que recibas un error cuando le solicites a Gemini. En ese caso, repite la operación de instrucción una vez más para obtener la respuesta. Por ejemplo, haz clic en el vínculo "Explain this log input". de nuevo.

5. Explicación de revisión proporcionada por Gemini. Si la explicación proporcionada no es suficiente o poco clara, pídele a Gemini que proporcione más información usando una de las siguientes instrucciones o redactando 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 sugerencias a Gemini para resolver el problema. Por ejemplo, pídele a Gemini

¿Cómo solucionar este problema?
Sugiere una solución para resolver este error
Sugiere cómo puedo corregir este error

La respuesta de Gemini puede variar según el contexto actual, además de la redacción y el formato de tu instrucción. Se espera que Gemini recomiende asegurarse de que el código fuente de Cloud Function tenga una función con el nombre hello_http.

7. Estás viendo 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 Function 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 NEXT en la parte inferior para ver Inline Editor. Sigue la recomendación de Gemini y cambia el nombre de la función de get_order_list a hello_http.

Después de finalizar la edición, 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.

NOTA que Console puede seguir mostrándote el último mensaje de error hasta que se complete el proceso de implementación.

10. Comprueba que la Cloud Function esté operativa. Para ello, envía la siguiente solicitud HTTPS con curl. Puedes usar Cloud Shell o hacerlo desde cualquier terminal que tenga las CLI de curl y gcloud instaladas.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)"

NOTA que, para ejecutar este comando desde una terminal, deberás autenticarte con gcloud CLI 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 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 arriba del Inline Editor, a la derecha del campo del entorno de ejecución:

9a3cd8bf272b4d02.png

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

4. Limpieza

Para realizar una limpieza, puedes cerrar el proyecto o borrar la instancia de Cloud Function. 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 Gemini correctamente para solucionar los problemas de 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