Créer une expérience de chaos qui utilise une erreur directe de service 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 basculement Azure Cosmos DB en écriture seule et en lectures multiples en tirant parti d’une expérience de chaos et d’Azure Chaos Studio. L’exécution de cette expérience peut vous aider à vous prémunir contre la perte de données lorsqu’un événement de basculement se produit.

Vous pouvez utiliser ces mêmes étapes pour configurer et exécuter une expérience pour toute erreur directe de service. Une erreur de service direct s’exécute directement sur une ressource Azure sans nécessiter d’instrumentation, contrairement aux erreurs basées sur l’agent qui demandent l’installation de l’agent Chaos.

Prérequis

  • Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
  • Un compte Azure Cosmos DB. Si vous n’avez pas de compte Azure Cosmos DB, vous pouvez en créer un.
  • Au moins deux configurations de région, une de lecture et une d’écriture pour votre compte Azure Cosmos DB.

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

Activer Chaos Studio sur votre compte Azure Cosmos DB

Chaos Studio ne peut injecter des erreurs sur une ressource que si cette dernière a d’abord été intégrée à Chaos Studio. Pour ajouter une ressource à Chaos Studio, vous créez une cible et des fonctionnalités sur la ressource. Les comptes Azure Cosmos DB n’ont qu’un seul type cible (service direct) et une seule fonctionnalité (basculement). D’autres ressources peuvent avoir jusqu’à deux types cibles. L’un des types cibles est destiné aux erreurs directes de service. Un autre type cible est destiné aux erreurs basées sur l’agent. D’autres ressources peuvent avoir de nombreuses autres fonctionnalités.

  1. Créez une cible en remplaçant $RESOURCE_ID par l’ID de ressource de la ressource que vous ajoutez. Remplacez $TARGET_TYPE par le type cible que vous ajoutez :

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    Par exemple, si vous ajoutez une machine virtuelle en tant que cible directe de service :

    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-VirtualMachine?api-version=2023-11-01" --body "{\"properties\":{}}"
    
  2. Créez les fonctionnalités sur la cible en remplaçant $RESOURCE_ID par l’ID de ressource de la ressource que vous ajoutez. Remplacez $TARGET_TYPE par le type cible que vous ajoutez. Remplacez $CAPABILITY par le nom de la fonctionnalité d’erreur que vous activez.

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    Par exemple, si vous activez la fonctionnalité d’arrêt de machine virtuelle :

    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-VirtualMachine/capabilities/shutdown-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
    

Vous venez d’achever l’ajout de votre compte Azure Cosmos DB à Chaos Studio.

Créer une expérience

Vous pouvez maintenant 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.

    {
      "location": "eastus",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "steps": [
          {
            "name": "Step1",
            "branches": [
              {
                "name": "Branch1",
                "actions": [
                  {
                    "type": "continuous",
                    "selectorId": "Selector1",
                    "duration": "PT10M",
                    "parameters": [
                      {
                        "key": "readRegion",
                        "value": "East US 2"
                      }
                    ],
                    "name": "urn:csci:microsoft:cosmosDB:failover/1.0"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "id": "Selector1",
            "type": "List",
            "targets": [
              {
                "type": "ChaosTarget",
                "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/chaosstudiodemo/providers/Microsoft.DocumentDB/databaseAccounts/myDB/providers/Microsoft.Chaos/targets/Microsoft-CosmosDB"
              }
            ]
          }
        ]
      }
    }
    
  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 le nom de votre 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é mentionné dans la réponse, pour l’étape suivante.

Accorder une autorisation d’expérience à votre compte Azure Cosmos DB

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.

Accordez à l’expérience l’accès à vos ressources à l’aide de la commande suivante. Remplacez $EXPERIMENT_PRINCIPAL_ID par l’ID de principal obtenu à l’étape précédente. Remplacez $RESOURCE_ID par l’ID de ressource de la ressource cible. En l’occurrence, il s’agit de l’ID de ressource d’instance Azure Cosmos DB. Remplacez le rôle par le rôle intégré approprié pour ce type de ressource. Exécutez cette commande pour chaque ressource ciblée dans votre expérience.

az role assignment create --role "Cosmos DB Operator" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID

Exécuter votre expérience

Vous êtes maintenant prêt à exécuter votre expérience. Pour voir l’effet, nous vous recommandons d’ouvrir la vue d’ensemble de votre compte Azure Cosmos DB et d’accéder à Répliquer des données globalement dans un onglet de navigateur distinct. Actualisez régulièrement pendant l’expérience pour afficher l’échange de région.

  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 directe de service Azure Cosmos DB, vous êtes prêt à :