Résoudre les problèmes avec Gemini CodeLab

1. Introduction

Dans cet atelier, vous allez utiliser Gemini, un collaborateur optimisé par l'IA dans Google Cloud, pour résoudre un problème de déploiement de Cloud Functions en analysant les journaux d'erreurs, en identifiant la cause du problème et en trouvant comment le résoudre.

Ce que vous allez effectuer...

  • Vous utiliserez le terminal Cloud Shell et la gcloud CLI pour configurer l'environnement, y compris en activant les API Google concernées et en créant une fonction Cloud à partir du code fourni.
  • Vous utiliserez la synthèse des journaux Cloud Logging pour générer des résumés de journaux afin de comprendre les informations capturées.
  • Vous discuterez avec Gemini pour obtenir de l'aide afin de résoudre le problème.

Ce que vous allez apprendre...

  • Découvrez comment utiliser Gemini avec Google Cloud Observability et pour résoudre les problèmes.
  • Découvrez comment trouver et comprendre les journaux Cloud Functions avec l'aide de Gemini.

Ce dont vous avez besoin...

  • Navigateur Web Chrome
  • Un projet Google Cloud avec facturation activée
  • Un compte Google disposant des autorisations d'accès au projet qui vous permettent d'activer des API et de manipuler des ressources

Cet atelier s'adresse aux ingénieurs DevOps et de plate-forme, ainsi qu'aux développeurs de logiciels de tous niveaux, y compris aux débutants. L'objectif est de vous familiariser avec les fonctionnalités de Gemini pour le dépannage.

2. Préparation

Cette section décrit tout ce que vous devez faire pour commencer cet atelier.

Configurer l'environnement

1. Connectez-vous à la console Cloud en ouvrant https://console.cloud.google.com.

2. Sélectionnez un projet Google Cloud que vous comptez utiliser dans cet atelier.

22170459a4f3ba59.png

3. Ouvrez la page Cloud Functions dans la console. Pour ce faire, sélectionnez Cloud Functions dans le menu de navigation (icône ☰ en haut à gauche de la fenêtre de la console).

9d27c844c16ad3e4.png

Vous pouvez également rechercher "cloud functions" dans la zone de recherche de la console :

35f23e52875b26cd.png

Cliquez sur le bouton "Créer une fonction" en haut de la liste des fonctions 34b5e7e36f4e48e9.png.

Si vous n'avez pas utilisé Cloud Functions dans ce projet auparavant, vous serez invité à activer les API Google pour que cela fonctionne.

5b7978521d6f56f7.png

Cliquez sur ACTIVER pour continuer.

4. Définissez les propriétés de base de la nouvelle fonction Cloud.

  • Définissez le nom sur "codelab-cf".
  • Sélectionnez l'option Autoriser les appels non authentifiés.

6a2aaf9bedd161d9.png

Pour terminer l'étape, cliquez sur le bouton "SUIVANT" en bas à gauche de la fenêtre :

f4e76470dbdf6854.png

Après avoir cliqué sur "Suivant", vous serez peut-être invité à activer d'autres API Google. Comme à l'étape 4, cliquez sur "ACTIVER".

1ad7bf15c07eda49.png

Configurer le code et l'environnement d'exécution de la fonction Cloud

Cet atelier de programmation utilise Python comme langage de programmation. Ne vous inquiétez pas si vous ne connaissez pas Python. Pour suivre cet atelier de programmation, vous n'avez pas besoin de connaître Python.

5. Sélectionnez Python 3.11 comme environnement d'exécution de la fonction.

9a3cd8bf272b4d02.png

Notez que le changement de runtime modifie le code source affiché dans l'éditeur intégré.

6. Copiez le code ci-dessous dans l'éditeur intégré pour modifier l'exemple de démarrage rapide généré automatiquement.

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)

Ce code lit l'attribut path de la requête GET, analyse le chemin d'accès pour récupérer le nom du bucket et appelle l'API Google Cloud Storage pour obtenir la liste des objets stockés à ce chemin d'accès. La fonction (get_object_list) accepte une requête qui est un objet Flask en tant qu'argument d'entrée et renvoie les noms des objets sous forme de tableau JSON.

7. Sélectionnez le fichier requirements.txt dans la liste des fichiers restants dans l'éditeur intégré. Remplacez la liste actuelle des dépendances par la nouvelle en copiant le code ci-dessous dans l'éditeur intégré.

google-cloud-storage

8. Pour déployer la fonction Cloud, cliquez sur DÉPLOYER en bas à gauche.

17c4828702a32cd9.png

Vous devrez peut-être patienter quelques minutes jusqu'à la fin du processus de déploiement. Si vous avez suivi attentivement les instructions de configuration, le déploiement devrait être signalé comme ayant échoué.

3. Identifier et résoudre le problème

Dans cette section, vous allez utiliser la fonctionnalité d'explication des journaux et d'autres outils d'assistance Gemini pour identifier le problème et la manière de le résoudre.

1. Le déploiement échoue. Un message d'erreur devrait s'afficher pour vous en informer, avec des informations supplémentaires et une option permettant d'afficher les journaux de déploiement. Cliquez sur AFFICHER LES JOURNAUX pour afficher les journaux du déploiement.

bc62db6ef3b35420.png

Notez que les journaux de déploiement s'ouvriront dans un onglet distinct du même navigateur. Vous devrez passer d'un onglet à l'autre pour terminer cet atelier de programmation.

REMARQUE : Il est possible que vous ne voyiez pas de lignes de journaux lorsque vous cliquez sur AFFICHER LES JOURNAUX ou que vous n'en voyiez que quelques-unes. Dans ce cas, utilisez le sélecteur de période dans le volet de requête de l'explorateur de journaux et sélectionnez 30 dernières minutes.

e24856920201ebf8.png

2. Examinez les journaux dans l'onglet ouvert. Notez que les récapitulatifs de journaux ressemblent à plusieurs lignes de la pile d'appels de l'exception. En effet, Cloud Functions capture le texte imprimé sur stdout ou stderr et écrit chaque ligne en tant qu'entrée de journal distincte. D'autres lignes de journaux résument des informations sur le code d'erreur de sortie, ainsi que des informations supplémentaires signalées par les API Cloud Functions et Cloud Run.

b49e41594173b57c.png

Vous pouvez cliquer sur l'une des lignes pour afficher plus d'informations sur un journal spécifique. Les journaux développés comportent des éléments d'interface utilisateur supplémentaires sur lesquels vous pouvez cliquer pour copier toutes les informations du journal, développer tous les champs pour afficher toutes les données de l'entrée de journal et expliquer l'entrée de journal à l'aide de Gemini.

4. La pile d'appels d'exception n'est pas très informative. Parcourez les journaux pour trouver la fin du journal de trace de pile de l'exception. Il s'agit de la ligne "Container called exit(1)". Le récapitulatif du journal suivant indique :

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

Il semble être un bon candidat pour une enquête. Cliquez sur cette ligne pour développer l'entrée de journal. Cliquez ensuite sur le bouton Explication de cette entrée de journal pour afficher des informations supplémentaires sur le journal sélectionné.

b815de46d1b4597c.png

Si Gemini n'a jamais été utilisé dans ce projet, vous serez invité à activer une API requise. Si vous êtes invité à activer l'API, cliquez sur "ACTIVER" pour continuer.

7ca90e087a2e99d1.png

REMARQUE : Il est possible que vous obteniez parfois une erreur lorsque vous envoyez une requête à Gemini. Dans ce cas, répétez votre opération de requête une fois de plus pour obtenir la réponse. Par exemple, cliquez à nouveau sur le bouton Explication de cette entrée de journal.

5. Examinez l'explication fournie par Gemini. Si l'explication fournie n'est pas suffisante ou n'est pas claire, demandez à Gemini de vous fournir plus d'informations en utilisant l'une des requêtes suivantes ou en posant votre propre question.

Pouvez-vous m'en dire plus sur ce journal ?
Pouvez-vous m'en dire plus sur cette erreur ?

6. Demandez ensuite à Gemini de vous suggérer des solutions pour résoudre le problème. Par exemple, demandez à Gemini

Comment résoudre ce problème ?
Suggère une solution pour résoudre cette erreur
Suggère une solution pour résoudre cette erreur

La réponse de Gemini peut varier en fonction du contexte actuel, ainsi que de la formulation et du format de votre requête. Gemini devrait vous recommander de vous assurer que le code source de la fonction Cloud comporte une fonction portant le nom hello_http.

7. Vous êtes actuellement dans l'onglet qui affiche les journaux Cloud Functions. Sélectionnez l'onglet précédent qui affiche la page de déploiement de Cloud Functions avec l'erreur, puis cliquez sur MODIFIER.

c3d9b207214a2240.png

8. Vérifiez que l'authentification est toujours définie sur Autoriser les appels non authentifiés et modifiez la sélection si nécessaire.

6a2aaf9bedd161d9.png

9. Cliquez sur SUIVANT en bas de l'écran pour afficher l'éditeur intégré. Suivez la recommandation de Gemini et remplacez le nom de la fonction get_order_list par hello_http.

Une fois la modification terminée, cliquez sur DÉPLOYER.

Vous devrez peut-être patienter quelques minutes jusqu'à la fin du processus de déploiement. Vérifiez que le déploiement s'est terminé correctement et qu'aucun message d'erreur n'est apparu.

REMARQUE : Il est possible que la console continue d'afficher le dernier message d'erreur jusqu'à la fin du processus de déploiement.

10. Vérifiez que la fonction Cloud est opérationnelle en envoyant la requête HTTPS suivante à l'aide de curl. Vous pouvez utiliser Cloud Shell ou le faire depuis n'importe quel terminal sur lequel les CLI curl et gcloud sont installées, en exécutant la commande suivante depuis le terminal 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)"

REMARQUE : Pour exécuter cette commande depuis un terminal, vous devrez vous authentifier à l'aide de gcloud CLI et définir la valeur de l'ID de votre projet sur la variable d'environnement GOOGLE_CLOUD_PROJECT.

Bonus

Le nom de la fonction hello_http a été défini comme point d'entrée par défaut pour la fonction Cloud déclenchée par HTTP lorsque l'environnement d'exécution Python a été sélectionné. Une autre solution consiste à conserver get_order_list comme nom de la fonction dans le code source et à mettre à jour le champ du point d'entrée de la fonction Cloud situé au-dessus de l'éditeur intégré, à droite du champ "Exécution" :

9a3cd8bf272b4d02.png

Le problème de déploiement sera résolu si vous remplacez le point d'entrée hello_http par get_order_list.

4. Nettoyage

Pour effectuer le nettoyage, vous pouvez arrêter le projet ou supprimer l'instance de fonction Cloud. Vous pouvez supprimer des fonctions Cloud à l'aide de la console ou avec la commande CLI comme ci-dessous :

gcloud functions delete codelab-cf --region=us-central1

5. Félicitations !

Bravo ! Vous avez utilisé Gemini pour résoudre le problème lié à votre application. Vous savez maintenant comment il peut vous aider à comprendre les journaux et à obtenir des réponses à vos questions sur Google Cloud.

Documents de référence...