Créer une expérience de chaos qui utilise une erreur basée sur un agent avec Azure CLI
Vous pouvez utiliser une expérience de chaos pour vérifier que votre application résiste aux défaillances en les provoquant dans un environnement contrôlé. Dans cet article, vous allez provoquer un événement correspondant à un pourcentage élevé d’utilisation du processeur sur une machine virtuelle Linux en utilisant une expérience de chaos et Azure Chaos Studio. Exécutez cette expérience pour découvrir comment empêcher une application de manquer de ressources.
Vous pouvez suivre ces mêmes étapes afin de configurer et d’exécuter une expérience pour n’importe quelle erreur basée sur un agent. Une erreur basée sur un agent nécessite de configurer et d’installer l’agent de chaos. Une erreur affectant directement un service s’exécute directement sur une ressource Azure sans avoir besoin d’instrumentation.
Prérequis
- Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
- Une machine virtuelle exécutant un système d’exploitation figurant dans la liste de compatibilité des versions. Si vous n’avez pas de machine virtuelle, vous pouvez en créer une.
- Une configuration réseau qui vous permet de vous connecter en SSH à votre machine virtuelle.
- Une identité managée affectée par l’utilisateur. Si vous n’avez pas d’identité managée affectée par l’utilisateur, vous pouvez en créer une.
Ouvrir Azure Cloud Shell
Azure Cloud Shell est un interpréteur de commandes interactif et gratuit que vous pouvez utiliser pour exécuter les étapes de cet article. Il contient des outils Azure courants préinstallés et configurés pour être utilisés avec votre compte.
Pour ouvrir Cloud Shell, sélectionnez Essayer en haut à droite d’un bloc de code. Vous pouvez également ouvrir Cloud Shell sous un autre onglet de navigateur en accédant à Bash. Sélectionnez Copier pour copier les blocs de code, collez-les dans Cloud Shell et appuyez sur Entrée pour les exécuter.
Si vous préférez installer et utiliser l’interface de ligne de commande localement, vous aurez besoin d’Azure CLI version 2.0.30 ou ultérieure pour ce tutoriel. Exécutez az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Remarque
Ces instructions impliquent l’utilisation d’un terminal Bash dans Cloud Shell. Certaines commandes risquent de ne pas fonctionner comme prévu, si vous exécutez l’interface CLI localement ou dans un terminal PowerShell.
Attribuer une identité managée à la machine virtuelle
Avant de configurer Chaos Studio sur la machine virtuelle, attribuez une identité managée affectée par l’utilisateur à chaque machine virtuelle ou groupe de machines virtuelles identiques où vous comptez installer l’agent. Utilisez la commande az vm identity assign
ou az vmss identity assign
. Remplacez $VM_RESOURCE_ID
/$VMSS_RESOURCE_ID
par l’ID de ressource de la machine virtuelle que vous ajoutez en tant que cible de chaos. Remplacez $MANAGED_IDENTITY_RESOURCE_ID
par l’ID de ressource de l’identité managée affectée par l’utilisateur.
Machine virtuelle
az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Jeu de mise à l'échelle de machine virtuelle
az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Activer Chaos Studio sur votre machine virtuelle
Chaos Studio ne peut pas injecter d’erreurs sur une machine virtuelle, sauf si celle-ci a été ajoutée au préalable à Chaos Studio. Pour ajouter une machine virtuelle à Chaos Studio, créez une cible et des fonctionnalités sur la ressource. Installez ensuite l’agent de chaos.
Les machines virtuelles ont deux types de cibles. L’un des types de cibles active les erreurs affectant directement le service (où aucun agent n’est nécessaire). L’autre type de cible active les erreurs basées sur un agent (ce qui nécessite l’installation d’un agent). L’agent de chaos est une application installée sur votre machine virtuelle en tant qu’extension de machine virtuelle. Vous l’utilisez pour injecter des erreurs dans le système d’exploitation invité.
Activer la cible et les fonctionnalités de chaos
Configurez ensuite une cible Microsoft-Agent sur chaque machine virtuelle ou groupe de machines virtuelles identiques, qui spécifie l’identité managée affectée par l’utilisateur dont l’agent se sert pour se connecter à Chaos Studio. Dans cet exemple, nous utilisons une identité managée pour toutes les machines virtuelles. Une cible doit être créée via l’API REST. Dans cet exemple, nous utilisons la commande CLI az rest
pour exécuter les appels d’API REST.
Modifiez le code JSON suivant en remplaçant
$USER_IDENTITY_CLIENT_ID
par l’ID client de votre identité managée. Vous trouverez l’ID client dans la vue d’ensemble du portail Azure de l’identité managée affectée par l’utilisateur que vous avez créée. Remplacez$USER_IDENTITY_TENANT_ID
par votre ID de tenant (locataire) Azure. Vous le trouverez dans le portail Azure sous Microsoft Entra ID, sous Informations sur le locataire. Enregistrez le code JSON dans un fichier, à l’emplacement où vous exécutez Azure CLI. Dans Cloud Shell, vous pouvez effectuer un glisser-déplacer du fichier JSON pour le charger.{ "properties": { "identities": [ { "clientId": "$USER_IDENTITY_CLIENT_ID", "tenantId": "$USER_IDENTITY_TENANT_ID", "type": "AzureManagedIdentity" } ] } }
Créez la cible en remplaçant
$RESOURCE_ID
par l’ID de ressource de la machine virtuelle ou du groupe de machines virtuelles identiques cible. Remplaceztarget.json
par le nom du fichier JSON que vous avez créé à l’étape précédente.az rest --method put --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 --body @target.json --query properties.agentProfileId -o tsv
Si vous recevez une erreur d’analyse PowerShell, passez à un terminal Bash comme cela est recommandé pour ce tutoriel, ou placez le fichier JSON référencé entre des guillemets simples (
--body '@target.json'
).Prenez note du GUID du agentProfileId renvoyé par cette commande pour l’utiliser dans une étape ultérieure.
Créez les fonctionnalités en remplaçant
$RESOURCE_ID
par l’ID de ressource de la machine virtuelle ou du groupe de machines virtuelles identiques cible. Remplacez$CAPABILITY
par le nom de la fonctionnalité d’erreur que vous activez (par exempleCPUPressure-1.0
).az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
Par exemple, si vous activez la fonctionnalité de sollicitation du processeur :
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/CPUPressure-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
Installer l’extension de machine virtuelle Chaos Studio
L’agent de chaos est une application qui s’exécute sur vos instances de machine virtuelle ou de groupe de machines virtuelles identiques pour générer des erreurs basées sur un agent. Durant l’installation, vous configurez :
- L’agent disposant de l’identité managée qui lui permet de s’authentifier auprès de Chaos Studio.
- L’ID de profil de la cible Microsoft-Agent que vous avez créée.
- Le cas échéant, une clé d’instrumentation Application Insights qui permet à l’agent d’envoyer des événements de diagnostic à Application Insights.
Avant de commencer, vérifiez que vous disposez des informations suivantes :
- agentProfileId : propriété retournée quand vous créez la cible. Si vous ne disposez pas de cette propriété, vous pouvez exécuter
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
et copier la propriétéagentProfileId
. - ClientId : ID client de l’identité managée affectée par l’utilisateur et utilisée dans la cible. Si vous ne disposez pas de cette propriété, vous pouvez exécuter
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
et copier la propriétéclientId
. - (Facultatif) AppInsightsKey : clé d’instrumentation de votre composant Application Insights, que vous trouverez dans la page Application Insights du portail sous Fonctionnalités essentielles.
- agentProfileId : propriété retournée quand vous créez la cible. Si vous ne disposez pas de cette propriété, vous pouvez exécuter
Installez l’extension de machine virtuelle Chaos Studio. Remplacez
$VM_RESOURCE_ID
par l’ID de ressource de votre machine virtuelle ou remplacez$SUBSCRIPTION_ID
,$RESOURCE_GROUP
et$VMSS_NAME
par les propriétés de votre groupe de machines virtuelles identiques. Remplacez$AGENT_PROFILE_ID
par l’ID de profil de l’agent. Remplacez$USER_IDENTITY_CLIENT_ID
par l’ID client de votre identité managée. Remplacez$APP_INSIGHTS_KEY
par votre clé d’instrumentation Application Insights. Si vous n’utilisez pas Application Insights, supprimez cette paire clé-valeur.Liste complète des options de configuration par défaut pour l’extension de machine virtuelle agent
Voici les options de configuration minimale pour l’extension de machine virtuelle agent nécessaires à l’utilisateur :
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID" }
Voici toutes les valeurs pour la configuration de l’extension de machine virtuelle agent
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID", "appinsightskey": "$APP_INSIGHTS_KEY", "overrides": { "region": string, default to be null "logLevel": { "default" : string , default to be Information }, "checkCertRevocation": boolean, default to be false. } }
Installer l’agent sur une machine virtuelle
Windows
az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vm extension set --ids $VM_RESOURCE_ID --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Installer l’agent sur une machine virtuelle
Windows
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Si vous configurez un groupe de machines virtuelles identiques, vérifiez que les instances ont été mises à niveau vers le dernier modèle. Si nécessaire, mettez à niveau toutes les instances dans le modèle.
az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
Créer une expérience
Une fois que vous avez réussi à déployer votre machine virtuelle, vous pouvez créer votre expérience. Une expérience de chaos définit les actions à entreprendre sur les ressources cibles. Les actions sont organisées et exécutées en étapes séquentielles. L’expérience de chaos définit également les actions à entreprendre sur les branches, qui s’exécutent en parallèle.
Formulez le code JSON de votre expérience en partant de l’exemple de code JSON suivant. Modifiez le code JSON pour qu’il corresponde à l’expérience que vous souhaitez exécuter à l’aide de l’API de création d’expérience et de la bibliothèque d’erreurs.
{ "identity": { "type": "SystemAssigned" }, "location": "centralus", "properties": { "selectors": [ { "id": "Selector1", "targets": [ { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" }, { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myLinuxVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" } ], "type": "List" } ], "steps": [ { "branches": [ { "actions": [ { "duration": "PT10M", "name": "urn:csci:microsoft:agent:cpuPressure/1.0", "parameters": [ { "key": "pressureLevel", "value": "95" } ], "selectorId": "Selector1", "type": "continuous" } ], "name": "Branch 1" } ], "name": "Step 1" } ] } }
Si vous effectuez l’exécution sur un groupe de machines virtuelles identiques, modifiez les paramètres d’erreur pour inclure les numéros d’instance à cibler :
"parameters": [ { "key": "pressureLevel", "value": "95" }, { "key": "virtualMachineScaleSetInstances", "value": "[0,1,2]" } ]
Vous pouvez identifier les numéros d’instance de groupe identique dans le portail Azure en accédant à votre groupe de machines virtuelles identiques, et en sélectionnant Instances. Le nom de l’instance se termine par le numéro d’instance.
Créez l’expérience à l’aide d’Azure CLI. Remplacez
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
et$EXPERIMENT_NAME
par les propriétés de votre expérience. Vérifiez que vous avez enregistré et chargé le fichier JSON de votre expérience. Mettez à jourexperiment.json
avec votre nom de fichier JSON.az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
Chaque expérience crée une identité managée affectée par le système correspondante. Notez l’ID de principal de cette identité dans la réponse de l’étape suivante.
Octroyer à l’expérience l’autorisation d’accéder à votre machine virtuelle
Lorsque vous créez une expérience de chaos, Chaos Studio crée une identité managée affectée par le système qui exécute des erreurs sur vos ressources cibles. Cette identité doit avoir les autorisations appropriées sur la ressource cible pour que l’expérience s’exécute correctement. Le rôle Lecteur est requis pour les erreurs basées sur un agent. Les autres rôles qui ne disposent pas de l’autorisation */Read, par exemple Contributeur de machines virtuelles, n’octroient pas l’autorisation appropriée pour les erreurs basées sur un agent.
Octroyez à l’expérience l’accès à votre machine virtuelle ou votre groupe de machines virtuelles identiques en utilisant la commande suivante. Remplacez $EXPERIMENT_PRINCIPAL_ID
par l’ID de principal de l’étape précédente. Remplacez $RESOURCE_ID
par l’ID de ressource de la machine virtuelle ou du groupe de machines virtuelles identiques cible. Veillez à utiliser l’ID de ressource de la machine virtuelle, et non l’ID de ressource de l’agent de chaos utilisé dans la définition de l’expérience. Exécutez cette commande pour chaque machine virtuelle ou groupe de machines virtuelles identiques ciblé dans votre expérience.
az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
Exécuter votre expérience
Vous êtes désormais prêt à exécuter votre expérience. Pour voir l’effet, nous vous recommandons d’ouvrir un graphique de métriques Azure Monitor avec la sollicitation du processeur de votre machine virtuelle dans un onglet de navigateur distinct.
Démarrez l’expérience à l’aide d’Azure CLI. Remplacez
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
et$EXPERIMENT_NAME
par les propriétés de votre expérience.az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
La réponse comprend une URL d’état que vous pouvez utiliser pour interroger l’état de l’expérience pendant l’exécution de celle-ci.
Étapes suivantes
Maintenant que vous avez exécuté une expérience basée sur un agent, vous êtes prêt à :