Système de notification pour Cloud Run avec Google Chat pour les pipelines CI/CD.

EZEKIAS BOKOVE
6 min readJul 6, 2022

Imaginer que vous êtes notifié à chaque fois que votre pipeline CI/CD se déclenche et effectue une action (mis à jour, suppression, et autres) sur vos différents services Cloud Run 🤔🤔. Cela vous permettra à vous et à vos équipes d’être informé en temps réel de ce qui se passe au niveau de vos services. Si vous êtes intéressé par un pipeline CI/CD pour Cloud Run, vous pouvez lire mon article précèdent 👇.

Dans cet article, nous allons voir comment mettre en place un système de notification pour les services Cloud Run. Vous pouvez étendre cela à d’autres services de Google Cloud. Ici, nous allons utiliser l’événement de mise à jour pour notre configuration. En fonction de vos besoins, vous pouvez choisir l’événement de Cloud Audit Logs qui vous convient.

Let’s go now !

Activation des APIs nécessaires

gcloud services enable run.googleapis.com
gcloud services enable eventarc.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable workflows.googleapis.com
gcloud services enable secretmanager.googleapis.com

Création d’un Service pour le test final

Déployer l’image us-docker.pkg.dev/cloudrun/container/hello sur Cloud Run avec, comme nom de service hello.

Laisser le reste des paramètres par défaut.

Déploiement du code de notification sur Cloud Run

Nous allons d’abord récupérer le code sur GitHub.

Comme vous pouvez le constater, nous avons trois variables d’environnement dans notre code qui sont :

GOOGLE_CHAT_SPACE : l’id de votre Space

GOOGLE_CHAT_KEY : la clé de votre Webhook

GOOGLE_CHAT_TOKEN : le token de votre Webhook

Pour obtenir plus d’informations sur ces différentes variables 👇👇.

Sécurisation des variables d’environnement

Pour enregistrer les variables GOOGLE_CHAT_SPACE, GOOGLE_CHAT_KEY, GOOGLE_CHAT_TOKEN dans Secret Manager, sélectionnez Security suivi de Secret Manager dans le menu supérieur gauche. Ensuite, cliquer sur CREATE SECRET et mettez le nom de la variable et la valeur du secret. Laisser le reste des paramètres par défaut. Effectuer la même opération pour chaque variable d’environnement.

Une fois que nous avons récupéré le code, nous allons :

  • Créer une image docker ou utiliser mon image us-central1-docker.pkg.dev/myfreestyle/public/cloudrun-notify-google-chat:v1
  • Pousser l’image docker sur Artifact Registry
  • Créer un service account pour le service Cloud Run avec le rôle Secret Manager Secret Accessor
  • Exiger l’authentification pour le service.
  • Ajouter les variables d’environnement
  • Déployer l’image docker sur Cloud Run avec le service account créé précédemment et qui dispose uniquement du rôle Secret Manager Secret Accessor .

Configuration du service account de Workflows

Pour utiliser Workflows, on aura besoin d’un service account workflows-notify-google-chat qui aura pour rôle :

Cloud Run Invoker : Peut invoquer des services.

Création de notre workflow

Dans le workflow qui va suivre, nous allons récupérer les informations du service Cloud Run qui a déclenché l’événement. Ensuite, nous allons les envoyer à notre service Cloud Run qui se chargera d’envoyer la notification dans Google Chat.

  • serviceImage: l’image qui a été déployé
  • serviceCreator: les coordonnés de celui qui a fait la mise à jour
  • serviceRegion: la région du service Cloud Run
  • dateCreation: la date et l’heure de la mise à jour du service Cloud Run
  • serviceName: le nom du service Cloud Run
  • revisionName: le nom de la dernière révision du service Cloud Run
  • serviceUrl: l’url du service Cloud Run

NB : Remplacer l’url et l’audience par les informations de votre service Cloud Run de notification.

Maintenant, nous allons configurer Eventarc.

Activation des journaux d’audit cloud

Pour recevoir des événements d’un service, vous devez activer les journaux d’audit Cloud.

Dans Cloud Console, sélectionnez IAM & Admin suivi d’ Audit Logs dans le menu supérieur gauche. Dans la liste des services, cochez Cloud Run Admin API :

Sélectionner Data Write et cliquer sur SAVE pour enregistrer votre choix.

Configuration du service account d’Eventarc

Nous allons créer un service account que nous allons appeler trigger-notification-google-chat qui aura les rôles :

Eventarc Event Receiver : récepteur d’événements.

Workflows Invoker : Accès permettant d’exécuter des workflows et de gérer les exécutions

Création d’un déclencheur Eventarc

Avant de commencer, vous devez savoir que si vous utilisez une seule région pour votre déclencheur Eventarc, seuls les événements des services Cloud Run de cette région seront capturé. Si vous voulez prendre en charge tous vos services Cloud Run, il faut utiliser la région global .

Maintenant, procédons à la configuration de notre déclencheur Eventarc avec le service account trigger-notification-google-chat . Nous allons prendre comme source de destination notre workflow précédent.

C’est le moment de tester notre configuration. Pour cela, il suffit de faire une mise à jour du service hello que nous avons déployé premièrement (par exemple, modifier le nombre de demandes maximales par conteneur) et vous allez recevoir une notification dans Google Chat.

En fonction de vos besoins, vous pouvez modifier la configuration actuelle et l’étendre à d’autres services de Google Cloud. Vous pouvez aussi ajouter des étiquettes pour distinguer les notifications (notification de mise à jour, suppression et autres).

Bonus

- Avec Microsoft Teams

La configuration est presque la même que celle de Google Chat. La différence se trouve au niveau du code qui est déployé sur Cloud Run pour les notifications.

Ici vous aurez besoin de la variable d’environnement Microsoft_Webhook_URL que vous allez ajouter dans Secret Manager .

- Avec Slack

C’est la même procédure avec Slack. Vous aurez besoin du code que voici 👇.

Pour Slack, vous aurez besoin de la variable d’environnement SLACK_URL_WEBHOOK que vous allez ajouter dans Secret Manager .

- Utiliser l’API de Google Chat directement dans Workflows

Étant donné que l’utilisation d’un service Cloud Run pour les notifications peut entraîner des coûts, vous pouvez utiliser l’API de Google Chat directement dans Workflows pour faire des économies. Pour cela, vous aurez besoin du workflow que voici 👇.

Votre workflow aura besoin d’un service account qui dispose des droits suivants:

Eventarc Event Receiver : récepteur d’événements.

Secret Manager Secret Accessor : avec ce rôle on pourra accéder à la variable d’environnement GOOGLE_CHAT_WEBHOOK_URL .

Merci à vous pour la lecture et à mon mentor guillaume blaquiere pour les conseils.

--

--

EZEKIAS BOKOVE

GDE & Champion Innovators for Google Cloud. Serverless & DevOps enthusiast. I like to learn from others, to share my knowledge with other people.