Partager via


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

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.

  1. 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"
          }
        ]
      }
    }
    
  2. 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. Remplacez target.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').

  3. Prenez note du GUID du agentProfileId renvoyé par cette commande pour l’utiliser dans une étape ultérieure.

  4. 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 exemple CPUPressure-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.
  1. 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.
  2. 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}}'
    
  3. 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.

  1. 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.

  2. 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 à jour experiment.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.

  1. 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
    
  2. 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 à :