Cette page explique comment planifier des tests dans Fault Injection Testing et comment utiliser des services de planification externes pour automatiser vos tests de résilience.
En planifiant des tests, vous pouvez automatiser vos processus de test et exécuter des tests pendant des périodes qui minimisent l'impact sur vos utilisateurs, par exemple :
- Les heures creuses ou les intervalles de maintenance planifiés.
- Les journées de jeu ou les exercices d'ingénierie du chaos planifiés régulièrement.
- Les pipelines de test automatisés (CI/CD) pour vérifier la résilience avant le déploiement.
La planification des tests vous permet d'établir une validation continue de la tolérance aux pannes de vos systèmes sans nécessiter d'intervention manuelle pour chaque exécution.
Fonctionnement des tests planifiés
Fault Injection Testing n'inclut pas de service de planification intégré. Au lieu de cela, vous planifiez des tests en intégrant Fault Injection Testing à un service de planification externe, tel que Cloud Scheduler.
Pour planifier un test, vous configurez le planificateur externe afin qu'il appelle l'API Fault Injection Testing ou exécute une commande gcloud à un moment spécifique. Pour prendre en charge cette intégration, Fault Injection Testing fournit le paramètre startOnCreateEnabled. Lorsqu'il est défini sur true, ce paramètre indique au système de démarrer automatiquement le test immédiatement après sa création.
Sélectionner des cibles pour les tests planifiés
Les ressources cibles d'un test planifié sont définies dans le modèle de test, et non dans la configuration de planification elle-même. Voici comment Fault Injection Testing gère les cibles :
- Lorsque vous créez un modèle de test, vous définissez le type de panne et les critères de sélection de vos ressources cibles. Par exemple, vous pouvez cibler des instances de VM spécifiques, des ressources avec des tags correspondants ou des ressources dans une zone spécifique.
- Lorsque vous configurez votre planificateur externe, la charge utile de l'API fait référence à votre modèle de test.
- À l'heure prévue, le planificateur externe déclenche la création du test. Fault Injection Testing évalue ensuite les règles de sélection de la cible dans le modèle à ce moment-là pour déterminer les ressources affectées.
Si votre modèle cible des VM en fonction d'un tag, le test planifié affecte toutes les VM qui possèdent ce tag au moment exact où le test est exécuté.
Configurer un test planifié
Avant de continuer, assurez-vous de disposer du rôle roles/faulttesting.operator ou roles/faulttesting.admin.
Configurer une planification à l'aide de la Google Cloud console et de Cloud Scheduler
Bien que vous ne puissiez pas créer de planifications directement dans la console Fault Injection Testing, celle-ci fournit les paramètres dont vous avez besoin pour configurer une tâche dans Cloud Scheduler.
- Dans la Google Cloud console, accédez à la page Modèles de test.
- Sélectionnez un modèle pour afficher ses détails.
Sur la page de détails, notez les éléments suivants :
- La charge utile JSON, qui inclut
"startOnCreateEnabled": true. - L'URL du point de terminaison de l'API REST pour créer un test.
Vous les utiliserez dans Cloud Scheduler.
- La charge utile JSON, qui inclut
Dans la Google Cloud console, accédez à la page Cloud Scheduler , puis cliquez sur Créer une tâche.
Définissez la planification et le fuseau horaire de votre tâche.
Sous Type de cible, sélectionnez HTTP.
Définissez l'URL sur l'URL du point de terminaison de l'API REST à partir de la page de détails Modèles de test.
Définissez la méthode HTTP sur POST.
Dans le champ Corps, saisissez la charge utile JSON :
{ "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID", "startOnCreateEnabled": true, "description": "DESCRIPTION" }Configurez l'authentification pour la tâche. Consultez les bonnes pratiques pour obtenir des recommandations sur les comptes de service.
Cliquez sur Créer.
Configurer une planification à l'aide de Google Cloud CLI
Si vous utilisez des scripts ou des outils qui exécutent des commandes shell, vous pouvez planifier des tests en configurant Cloud Scheduler ou votre propre planificateur pour exécuter la commande gcloud alpha fault-testing experiments create avec l'indicateur --start-on-create-enabled.
Exécutez la commande suivante pour créer et démarrer immédiatement une instance de test :
gcloud alpha fault-testing experiments create EXPERIMENT_ID \
--experiment-template=TEMPLATE_ID \
--location=REGION \
--start-on-create-enabled \
[--description="DESCRIPTION"] \
[--project=PROJECT_ID]
EXPERIMENT_ID: identifiant unique de l'exécution du test. Étant donné que cette commande est automatisée, votre script doit générer un ID unique pour chaque exécution. Par exemple, vous pouvez ajouter un code temporel :scheduled-exp-$(date +%s).TEMPLATE_ID: ID de votre modèle de test préconfiguré.REGION: région dans laquelle Google Cloud le test est exécuté.--start-on-create-enabled: cet indicateur indique à Fault Injection Testing de démarrer le test immédiatement après sa création.DESCRIPTION: (facultatif) description de l'exécution du test.PROJECT_ID: (facultatif) ID de votre Google Cloud projet.
Gérer les exécutions de test
Chaque exécution planifiée crée une instance de test distincte. Vous pouvez gérer ces instances à l'aide des commandes suivantes :
Pour répertorier toutes les exécutions de test :
gcloud alpha fault-testing experiments list --location=REGIONPour afficher les détails d'une exécution spécifique :
gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGIONPour arrêter un test en cours d'exécution prématurément :
gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
Bonnes pratiques
Lorsque vous planifiez des tests, tenez compte des bonnes pratiques suivantes :
- Utilisez un compte de service dédié. Lorsque vous configurez votre planificateur (tel que Cloud Scheduler), associez-le à un compte de service dédié. N'accordez à ce compte de service que les autorisations minimales requises pour gérer les tests, telles que
roles/faulttesting.operatorouroles/faulttesting.adminsur votre projet. - Générez des ID de test uniques. Lorsque vous déclenchez des tests à l'aide de scripts, assurez-vous que votre script génère un ID de test unique pour chaque exécution afin d'éviter les conflits de noms de ressources.
- Utilisez des noms ou des descriptions descriptifs. Chaque exécution planifiée crée une nouvelle instance de test. Elle ne redémarre ni n'écrase les tests précédents. Utilisez des noms ou des descriptions descriptifs pour vous aider à retrouver les exécutions dans leur planification.
- Surveillez les échecs de planification. Les déclencheurs externes peuvent échouer en raison de problèmes de réseau, d'expiration des identifiants ou de quotas d'API. Configurez la surveillance et les alertes sur vos tâches de planificateur pour être averti si une tâche ne s'exécute pas ou reçoit une réponse d'erreur.
- Coordonnez-vous avec les intervalles d'exclusion. Vérifiez que vos tests planifiés ne chevauchent pas les intervalles d'exclusion actifs exclusion windows. Si un test planifié est déclenché pendant un intervalle d'exclusion, Fault Injection Testing bloque l'exécution et le test ne démarre pas.