Ce tutoriel explique comment corriger les erreurs d'exécution rencontrées lorsque vous déployez des événements à partir de Cloud Storage à l'aide de journaux d'audit Cloud vers un service Cloud Run non authentifié.
Objectifs
- Créer un bucket Cloud Storage qui servira de source d'événements.
- Créer, importer et déployer une image de conteneur dans Cloud Run
- Créer des déclencheurs Eventarc
- Importer un fichier dans le bucket Cloud Storage
- Corriger les erreurs d'exécution
Coûts
Ce tutoriel utilise les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
Suivez les prérequis décrits sur la page Recevoir un événement Cloud Audit Logs.
Créer un bucket Cloud Storage
Créez deux buckets de stockage dans deux régions qui serviront de source d'événements pour le service Cloud Run :
us-east1
export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gsutil mb -l us-east1 gs://${BUCKET1}
us-west1
export BUCKET2="troubleshoot-bucket2-$PROJECT_ID" gsutil mb -l us-west1 gs://${BUCKET2}
Une fois la source d'événements créée, déployez le service récepteur d'événements sur Cloud Run.
Récupérer l'exemple de code
Clonez le dépôt :
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/eventarc/audit-storage
Examiner le code
Le code de ce tutoriel contient les éléments suivants :
Un serveur qui gère les messages entrants encapsulés dans une fonction CloudEvent de la requête HTTP POST :
Go
Java
.NET
Node.js
Python
Un Dockerfile qui définit l'environnement d'exploitation du service. Le contenu du Dockerfile varie selon le langage :
Go
Java
.NET
Node.js
Python
Envoyer le code
Pour transmettre votre code, procédez comme suit :
Créez votre image de conteneur avec Cloud Build, puis importez-la dans Container Registry :
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
En cas de réussite, un message SUCCESS contenant l'ID, l'heure de création et le nom de l'image s'affiche. L'image est stockée dans Container Registry et peut être réutilisée si vous le souhaitez.
Java
- Utilisez l'assistant d'identification gcloud pour autoriser Docker à transférer le conteneur vers Container Registry.
gcloud auth configure-docker
Utilisez le plug-in Maven Jib pour créer et transférer le conteneur dans Container Registry.
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/audit-storage
Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
audit-storage
est le nom du conteneur. En cas de réussite, un message SUCCESS s'affiche. L'image est stockée dans Container Registry et peut être réutilisée si vous le souhaitez.
.NET
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
En cas de réussite, un message SUCCESS contenant l'ID, l'heure de création et le nom de l'image s'affiche. L'image est stockée dans Container Registry et peut être réutilisée si vous le souhaitez.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
En cas de réussite, un message SUCCESS contenant l'ID, l'heure de création et le nom de l'image s'affiche. L'image est stockée dans Container Registry et peut être réutilisée si vous le souhaitez.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
En cas de réussite, un message SUCCESS contenant l'ID, l'heure de création et le nom de l'image s'affiche. L'image est stockée dans Container Registry et peut être réutilisée si vous le souhaitez.
- Utilisez l'assistant d'identification gcloud pour autoriser Docker à transférer le conteneur vers Container Registry.
Déployez l'image de conteneur dans Cloud Run :
gcloud run deploy troubleshoot-service --image gcr.io/PROJECT_ID/audit-storage \ --allow-unauthenticated
Remplacez PROJECT_ID par l'ID de votre projet GCP.
audit-storage
correspond au nom du conteneur ettroubleshoot-service
au nom du service Cloud Run.Notez que l'image de conteneur est déployée sur le service et la région que vous avez précédemment configurés quand vous avez configuré gcloud.
Lorsque vous effectuez un déploiement sur Cloud Run, répondez
y
(oui) à l'invite Autoriser l'accès non authentifié. Pour en savoir plus sur l'authentification basée sur IAM, consultez la page Rôles et autorisations Eventarc.Une fois le déploiement effectué, la ligne de commande affiche l'URL du service.
Créer un déclencheur
Maintenant que vous avez déployé un service Cloud Run, configurez un déclencheur pour écouter les événements de Cloud Storage via des journaux d'audit.
Créez un déclencheur de journal d'audit pour écouter les événements Cloud Storage :
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Cette action crée un déclencheur appelé
troubleshoot-trigger
.Pour vérifier que
troubleshoot-trigger
a été créé, exécutez la commande suivante :gcloud eventarc triggers list
troubleshoot-trigger
s'affiche avec une cibletroubleshoot-service
.
Générer et afficher un événement
Pour vérifier que le service a bien été déployé et que vous pouvez recevoir des événements de Cloud Storage, procédez comme suit :
Créez et importez un fichier dans le premier bucket de stockage :
echo "Hello World" > random.txt gsutil cp random.txt gs://${BUCKET1}/random.txt
Surveillez les journaux pour vérifier si le service a reçu un événement. Les journaux du service indiquent que le service écoute les événements, ce qui indique un problème dans la configuration :
Now listening on: http://0.0.0.0:8080
Examiner le problème
Vous pouvez maintenant suivre le processus permettant de déterminer pourquoi le service ne reçoit pas d'événements.
Journaux d'audit
Dans ce tutoriel, les événements Cloud Storage sont émis via des journaux d'audit et envoyés à Cloud Run. Vérifiez si les journaux d'audit sont activés pour Cloud Storage.
- Accédez à IAM et administration > Journaux d'audit, puis cochez la case Google Cloud Storage. Accéder à la console Cloud Audit Logging
- Assurez-vous que les types de journaux Cloud Audit Logging Lecture administrateur, Lecture de données et Écriture de données sont sélectionnés.
Une fois les journaux d'audit Cloud activés, importez à nouveau le fichier et vérifiez les journaux. Le service ne reçoit toujours pas d'événements, ce qui peut être dû à l'emplacement du déclencheur.
Emplacement du déclencheur
Plusieurs ressources peuvent se trouver à différents emplacements. Vous devez filtrer les événements des sources situées dans la même région que la cible Cloud Run. Pour en savoir plus, consultez les emplacements acceptés dans Eventarc.
Dans ce tutoriel, vous avez déployé le service Cloud Run dans la zone us-central1
.
Vous avez également créé un déclencheur au même emplacement, car vous avez défini eventarc/location
sur us-central1
.
Pour répertorier l'emplacement du déclencheur, décrivez le déclencheur :
gcloud eventarc triggers describe troubleshoot-trigger
Cependant, vous avez créé deux buckets dans les emplacements us-east1
et us-west1
. Pour recevoir des événements de ces emplacements, vous devez y créer des déclencheurs.
Nous allons créer un déclencheur dans us-east1
.
Supprimez le déclencheur existant dans l'emplacement
us-central1
:gcloud eventarc triggers delete troubleshoot-trigger
Définissez l'emplacement et la région sur
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Créez un déclencheur à l'emplacement
us-east1
:gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Vérifiez que le déclencheur a été créé :
gcloud eventarc triggers list
Un déclencheur peut prendre jusqu'à 10 minutes pour s'initialiser avant de commencer à diffuser des événements.
Délai d'initialisation
Une fois les déclencheurs créés, un délai d'initialisation de 10 minutes peut s'écouler avant le lancement de la diffusion des événements. Exécutez la commande suivante pour vérifier que les déclencheurs sont actifs :
gcloud eventarc triggers list
Un résultat semblable au suivant indique l'état du déclencheur :
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE
troubleshoot-trigger3 google.cloud.audit.log.v1.written troubleshoot-service2 By 14:16:56
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service Yes
Au bout de 10 minutes, importez à nouveau un fichier dans chaque bucket. Les événements de chaque fichier sont écrits dans les journaux du service Cloud Run. Si le service ne reçoit pas d'événements, cela peut être lié à leur taille.
Taille des événements
Les événements que vous envoyez ne doivent pas dépasser la limite de taille (512 ko).
Un déclencheur ayant déjà diffusé des événements a cessé de fonctionner
Vérifiez que la source génère des événements. Vérifiez les journaux d'audit Cloud et assurez-vous que le service surveillé émet des journaux. Si les journaux sont enregistrés, mais que les événements ne sont pas diffusés, contactez l'assistance.
Vérifiez qu'un sujet Pub/Sub avec le même nom de déclencheur existe.
- Pour répertorier les déclencheurs, consultez la page sur la commande gcloud eventarc triggers list.
Pour répertorier les sujets Pub/Sub, exécutez la commande suivante :
gcloud pubsub topics list
Vérifiez que le nom du sujet Pub/Sub inclut le nom du déclencheur créé. Si le sujet Pub/Sub est manquant, créez un sujet lors de la création du déclencheur.
Vérifiez l'état du sujet Pub/Sub :
Assurez-vous qu'une coche check_circle s'affiche dans l'onglet Déclencheurs. Dans Cloud Console, accédez à Cloud Run, puis sélectionnez le service que vous avez créé et accédez à l'onglet Déclencheurs.
Accédez à Pub/Sub > Sujets, puis cliquez sur le sujet Pub/Sub.
Vérifiez si les messages sont publiés dans le sujet avec la métrique
topic/send_message_operation_count
. Si les messages ne sont pas publiés dans le sujet, vérifiez les journaux d'audit Cloud et assurez-vous que le service surveillé émet des journaux. Si les journaux sont enregistrés, mais que les événements ne sont pas diffusés, contactez l'assistance.Vérifiez si les messages sont transférés vers Cloud Run avec la métrique
subscription/push_request_count
regroupée parresponse_code
.Dans Cloud Console, accédez à Cloud Monitoring.
Ajoutez votre projet à un nouvel espace de travail.
Cliquez sur Tableaux de bord, puis sélectionnez le tableau de bord Cloud Pub/Sub.
Dans le tableau de bord Cloud Pub/Sub, cliquez sur le sujet Pub/Sub que vous avez créé.
Dans la section Incidents, cliquez sur Créer une règle.
Sur la page Créer une règle d'alerte, cliquez sur Ajouter une condition.
Dans l'onglet Métrique, fournissez les conditions suivantes :
- Abonnement Cloud Pub/Sub en tant que Resource type (Type de ressource)
- Requêtes push en tant que Metric (Métrique)
- response_code dans le champ Group by (Grouper par)
- 0 comme seuil de configuration
Pour en savoir plus sur les métriques d'utilisation de Pub/Sub, consultez la section Surveiller les abonnements push.
Cliquez sur Add (Ajouter) pour accéder à la page Créer une règle d'alerte.
Dans la section Quelles sont les étapes pour résoudre le problème ?, indiquez le nom de l'alerte, par exemple
samplealert
, puis cliquez sur Enregistrer.Pour afficher l'alerte, accédez à Monitoring > Tableau de bord > Cloud Pub/Sub. Cliquez sur le sujet Pub/Sub, puis sur l'onglet Abonnement.
Si des erreurs de transmission sont signalées, consultez les journaux du service Cloud Run. Si le point de terminaison de réception renvoie un code d'état autre que OK, cela signifie que le code Cloud Run ne fonctionne pas comme prévu et que vous devez contacter l'assistance.
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources du tutoriel
Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel :
gcloud run services delete SERVICE_NAME
Où
SERVICE_NAME
est le nom de service que vous avez choisi.Vous pouvez également supprimer des services Cloud Run à partir de Google Cloud Console.
Supprimez les configurations gcloud CLI par défaut que vous avez ajoutées lors de la configuration du tutoriel.
Exemple :
gcloud config unset run/region
ou
gcloud config unset project
Supprimez les autres ressources Google Cloud créées dans ce tutoriel :
- Supprimez le déclencheur Eventarc :
gcloud eventarc triggers delete TRIGGER_NAME
RemplacezTRIGGER_NAME
par le nom de votre déclencheur.
- Supprimez l'image de conteneur nommée
gcr.io/PROJECT_ID/audit-storage
de Container Registry. Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
- Supprimez le déclencheur Eventarc :
Étape suivante
- Pour résoudre d'autres problèmes que vous pourriez rencontrer lors de l'utilisation d'Eventarc, consultez la page Résoudre les problèmes.