Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Safe Scrub : nettoyez vos projets Google Cloud.

By Joshua FoxJul 16, 20206 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Lorsque vous concevez et développez de nouvelles infrastructures sur Google Cloud, vous expérimentez avec toutes sortes de ressources. Résultat : un projet en désordre, et une facture qui grimpe puisque ces ressources continuent de tourner.

Vous pouvez les supprimer manuellement, mais difficile de tout retrouver à travers les nombreux services de GCP : Compute, Containers, AppEngine, Cloud SQL et bien d'autres.

J'ai créé l'outil open source Safe Scrub pour simplifier cette tâche — en toute sécurité !

La sécurité avant tout

Safe Scrub a été conçu pour être sûr.

Safe Scrub ne supprime pas les ressources ; il génère plutôt un script capable de le faire.

Un script de suppression transparent

Ce script est transparent : puisqu'il s'agit simplement d'une liste d'instructions gcloud``delete, vous comprenez aisément ce qu'il va faire à vos ressources. Une fois généré, examinez chaque ligne pour voir exactement ce qui sera supprimé, et lancez-le seulement ensuite.

C'est le principal garde-fou, mais il y en a d'autres.

Compte et projet explicites

Safe Scrub exige un fichier de clé JSON contenant les identifiants d'un compte de service, plutôt que ceux de votre compte utilisateur connecté. L'objectif : imposer le choix conscient d'un rôle. Le compte de service doit disposer d'un rôle sans capacités d'écriture, tel que Project Viewer, puisque le script de génération n'en a pas besoin et n'en utilise pas.

Vous pouvez même attribuer un rôle plus restreint si vous souhaitez seulement lister certains types de ressources. Un échec lié aux permissions ne pose aucun problème : si le rôle est trop restrictif (ou si une API GCP n'est pas encore activée), Safe Scrub poursuit son exécution sans encombre, sans pouvoir lister la ressource indisponible. Il affiche simplement un message d'erreur et continue.

Contrairement à gcloud lui-même, Safe Scrub vous oblige à indiquer explicitement un projet, afin d'éviter de recourir à un projet par défaut et de lister par accident des ressources que vous ne vouliez pas supprimer. Le script de suppression généré précise également le projet pour chaque commande, afin que la suppression ne soit pas exécutée par mégarde sur votre projet par défaut actuel.

Filtrage

Safe Scrub prend en charge deux types de filtrage.

D'abord, une option en ligne de commande vous permet de cibler précisément les ressources voulues. Vous pouvez filtrer par label, nom, date de création et bien plus encore, en exploitant toute la puissance du filtrage de gcloud. (Pour les buckets Cloud Storage, où c'est gsutil qui est utilisé plutôt que gcloud, seuls les filtres simples d'égalité sur une seule clé de label (key=value1) sont pris en charge. Sinon, le filtre est ignoré.)

Ensuite, Safe Scrub gère une liste de non-suppression dans exclusions.txt. Les ressources dont l'URI contient l'une de ces chaînes ne seront pas incluses dans le script. Pour utiliser cette fonctionnalité, lancez Safe Scrub, repérez les éléments à préserver à l'avenir, puis ajoutez l'URI complet ou une partie identifiante de l'URI à exclusions.txt. (Pour Cloud Functions, c'est le nom et non l'URI qui est utilisé, en raison d'un bug de gcloud.)

Par exemple, lorsque ces lignes apparaissent :

networks/default firewalls/default

les réseaux par défaut, ainsi que les pare-feu par défaut (dont les URI ont la forme https://www.googleapis.com/compute/v1/projects/my-project/global/firewalls/default-allow-https) ne seront pas supprimés.

Suivre le processus de suppression

Lors du premier lancement de vos scripts de suppression, vous voudrez observer le processus en temps réel. Safe Scrub ajoute set -x en tête du script pour produire une sortie de débogage.

Pour faciliter ce suivi, Safe Scrub génère un script séquentiel classique. Vous pouvez toutefois le configurer, via l'option -b, pour générer des commandes en arrière-plan (asynchrones), de sorte que la suppression de plusieurs ressources s'effectue en parallèle. C'est plus rapide, mais plus difficile à suivre, et cela risque de saturer les systèmes par un trop grand nombre d'appels simultanés.

Étapes suivantes : examiner et exécuter

Cette première étape se contente de produire un script de suppression. L'étape suivante consiste à le relire et à retirer les lignes correspondant aux ressources que vous souhaitez conserver. Vous pouvez aussi en profiter pour ajouter des entrées à exclusions.txt en vue d'un filtrage ultérieur.

Passer à la suppression effective

Lorsque vous êtes prêt, exécutez le script de suppression sous un compte disposant des permissions d'écriture nécessaires, comme Project Editor.

Mode dangereux

Nous adorons l'automatisation dans le cloud, mais dès qu'il s'agit de suppression de masse, mieux vaut redoubler de prudence et suivre chaque étape manuellement. Cela dit, sur un projet de développement ou de QA, vous pouvez affiner suffisamment votre configuration de Safe Scrub pour générer puis exécuter le script de suppression automatiquement, en une seule étape, sans appréhension. Pour cela, redirigez simplement la sortie vers bash, comme illustré dans dangerous-usage-example.sh. Dans ce cas, votre compte de service devra disposer des permissions de lecture et d'écriture, par exemple Project Editor.

Cas d'usage

Dev et QA vs production

Safe Scrub est conçu pour les projets de développement et de QA, quand vous souhaitez repartir d'une page blanche en fin de journée ou avant un nouveau cycle de tests. Il est peu adapté aux projets de production, où il convient d'identifier les dépendances potentielles entre composants avant toute suppression.

Débloquer des dépendances

Il s'avère également utile lorsqu'une dépendance résiduelle bloque la suppression d'une autre ressource. Par exemple, impossible de supprimer un cluster Google Kubernetes Engine tant qu'un backend pointe vers lui — même si ce backend n'est pas réellement utilisé par un load balancer. Utilisez Safe Scrub pour générer les commandes de suppression de toutes les ressources, puis sélectionnez la ligne de commande nécessaire pour supprimer le backend et libérer le verrou sur ce cluster.

Périmètre actuel et perspectives

Services pris en charge ou non

Google Cloud compte plus de 90 produits, et Safe Scrub ne les couvre pas tous. Je me suis concentré sur les services importants couramment déployés et démantelés dans les workflows habituels de développement et de QA. Cela inclut les types de ressources de GCE, PubSub, App Engine, Cloud SQL, Cloud Storage, Functions et GKE. Parmi les services non pris en charge figurent Composer, Data Catalog, Data Proc et bien d'autres. La liste complète des services pris en charge ou non apparaît dans le texte d'utilisation. (Lancez ./generate-deletion-script.sh.)

Types de ressources pris en charge ou non

Tous les types de ressources de chaque service ne sont pas nécessairement pris en charge, même si j'estime avoir couvert les plus importants, en écartant notamment ceux dont la suppression est très risquée. Par exemple, dans App Engine, les services, versions, instances et règles de pare-feu sont pris en charge, mais pas les certificats SSL. Si vous souhaitez voir d'autres API ou types de ressources couverts, n'hésitez pas à soumettre une pull request ou à ouvrir une issue sur GitHub.

Pistes d'évolution

Une future version de Safe Scrub pourrait s'appuyer sur la commande gcloud resources list (en alpha à la date de juin 2020) pour capturer l'intégralité des ressources. Rien ne garantit toutefois que nous suivrons cette voie : certains types de ressources ne se prêtent pas à la suppression (comme IAM, Secrets et les certificats SSL, où l'on risque de supprimer un élément essentiel). Par ailleurs, certains types de ressources nécessitent des commandes de suppression différentes. (Par exemple, nous utilisons gsutil au lieu de gcloud pour Cloud Storage, et nous utiliserons bq pour BigQuery.)

Pour commencer

Cliquez ici pour télécharger l'outil open source Safe Scrub.

Décompressez l'archive et lancez ./generate-deletion-script.sh pour afficher les instructions d'utilisation ; le fichier usage-example.sh en présente un exemple.

Le démarrage rapide le plus simple est le suivant :

  • Téléchargez une clé pour un compte de service ayant le rôle Project Viewer, et enregistrez-la sous le nom project-viewer-credentials.json dans le répertoire de Safe Script.
  • Lancez ensuite ./generate-deletion-script.sh -p <YOUR_PROJECT_NAME>.