Ce tutoriel explique comment écrire, déployer et déclencher une fonction Cloud basée sur les événements avec un déclencheur Cloud Audit Logs.
L'une des fonctionnalités uniques de Cloud Functions (2nd gen) est qu'il permet le déclenchement de vos fonctions par les entrées Cloud Audit Logs. De nombreux produits Google Cloud écrivent dans Cloud Audit Logs lorsque des actions importantes se produisent dans le produit. Ces entrées de journal peuvent déclencher l'exécution de fonctions Cloud Functions en temps réel, ce qui permet aux utilisateurs de les traiter et/ou d'y répondre automatiquement.
Ces journaux sont générés par de nombreux événements différents sur Google Cloud et couvrent la plupart des produits Google Cloud. Ainsi, les déclencheurs Cloud Audit Logs vous permettent de créer des fonctions qui réagissent à la plupart des changements d'état dans Google Cloud.
Ce tutoriel explique comment utiliser les déclencheurs Cloud Audit Logs pour ajouter un libellé aux instances Compute Engine nouvellement créées avec le nom de l'entité (personne ou compte de service) qui les a créées.
Si vous débutez avec Cloud Audit Logs et souhaitez en savoir plus, consultez la documentation correspondante.
Objectifs
- Écrire une fonction Cloud basée sur les événements qui reçoit un événement Cloud Audit Logs lorsqu'une instance de VM Compute Engine est créée.
- Déclencher la fonction en créant une instance de VM Compute Engine. À ce stade, l'instance sera libellée avec le nom de l'entité (personne ou compte de service) qui l'a créée.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Cloud Functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
- Compute Engine
Pour en savoir plus, consultez la page Tarifs de Cloud Functions.
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
- Installez et initialisez le SDK Cloud.
- Mettez à jour les composants
gcloud
: - Préparez votre environnement de développement.
gcloud components update
Vous avez besoin d'une invite de commande ? Vous pouvez utiliser Google Cloud Shell. Google Cloud Shell est un environnement de ligne de commande qui inclut le SDK Google Cloud. Vous n'avez donc pas besoin de l'installer. Le SDK Google Cloud est également préinstallé sur les machines virtuelles Google Compute Engine.
Prérequis
Ouvrez la page IAM et administration > Journaux d'audit dans la console Google Cloud :
Activez les types de journaux Cloud Audit Logs Admin Read, Data Read et Data Write pour l'API Compute Engine :
Vérifiez si le compte de service Compute Engine dispose du rôle
Editor
. Ce compte de service sera utilisé comme identité de service pour Cloud Functions.Accéder à la page IAM et administration > IAM
Recherchez l'entrée
PROJECT_NUMBER-compute@developer.gserviceaccount.com
dans la table et examinez la colonneRoles
. Si la colonne contientEditor
, vous pouvez ignorer les étapes suivantes. Sinon, passez aux étapes suivantes et attribuez les rôles nécessaires au compte de service.Attribuez le rôle
eventarc.eventReceiver
au compte de service Compute Engine du projet :PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver
Attribuez le rôle
run.invoker
au compte de service Compute Engine du projet pour que le déclencheur Pub/Sub puisse exécuter la fonction:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/run.invoker
Attribuez le rôle
compute.instanceAdmin
au compte de service Compute Engine du projet afin que le code de la fonction dispose des autorisations nécessaires pour obtenir les instances de VM et définir des libellés sur celles-ci:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/compute.instanceAdmin
Préparer l'application
Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire contenant l'exemple de code Cloud Functions permettant d'accéder à Cloud Audit Logs :
Node.js
cd nodejs-docs-samples/functions/v2/autoLabelInstance/
Python
cd python-docs-samples/functions/v2/label_gce_instance/
Go
cd golang-samples/functions/functionsv2/label_gce_instance/
Java
cd java-docs-samples/functions/v2/label-compute-instance/
Consultez l'exemple de code :
Node.js
Python
Go
Java
Déployer la fonction
Pour déployer la fonction avec un déclencheur Cloud Audit Logs, exécutez la commande suivante dans le répertoire contenant l'exemple de code (ou, dans le cas de Java, le fichier pom.xml
) :
Node.js
gcloud functions deploy nodejs-cal-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=autoLabelInstance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.
Python
gcloud functions deploy python-cal-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=label_gce_instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.
Go
gcloud functions deploy go-cal-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=label-gce-instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.
Java
gcloud functions deploy java-cal-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.AutoLabelInstance \ --memory=512MB \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.
La commande de déploiement ci-dessus spécifie les paramètres de filtre d'événements suivants qui correspondent à la création de la VM :
type
: type d'événement Cloud Audit Logs (google.cloud.audit.log.v1.written
).serviceName
: nom du service Google Cloud ayant généré l'entrée de journal, dans ce cascompute.googleapis.com
.methodName
: nom de la méthode API qui a généré l'entrée de journal, dans ce casv1.compute.instances.insert
.
Déclencher la fonction
Une fois la fonction déployée, vous pouvez vérifier qu'elle fonctionne :
Créez une instance de VM Compute Engine.
gcloud compute instances create
YOUR_INSTANCE_NAME
--zoneYOUR_ZONE
Vous pouvez également accéder à la console Google Cloud, puis cliquer sur Créer une VM.
Exécutez la commande suivante pour vérifier que l'instance a été correctement libellée :
gcloud compute instances describe
YOUR_INSTANCE_NAME
\ --zoneYOUR_ZONE \ --format 'value(labels)'
Un libellé au format
creator=YOURNAMEYOUR_DOMAIN
doit s'afficher.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet mais supprimez les ressources individuelles.
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 :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer une fonction Cloud Functions
La suppression de fonctions Cloud Functions ne supprime pas les ressources stockées dans Cloud Storage.
Pour supprimer la fonction Cloud que vous avez créée dans ce tutoriel, exécutez la commande suivante :
Node.js
gcloud functions delete nodejs-cal-function --gen2 --region REGION
Python
gcloud functions delete python-cal-function --gen2 --region REGION
Go
gcloud functions delete go-cal-function --gen2 --region REGION
Java
gcloud functions delete java-cal-function --gen2 --region REGION
Vous pouvez également supprimer des fonctions Cloud Functions à partir de Google Cloud Console.
Supprimer l'instance de VM Compute Engine
Pour supprimer l'instance de VM Compute Engine que vous avez créée dans ce tutoriel, exécutez la commande suivante :
gcloud compute instances deleteYOUR_INSTANCE_NAME
--zoneYOUR_ZONE