Share via


Criar um experimento de caos que usa uma falha direta de serviço com a CLI do Azure

Você pode usar um experimento de caos para verificar se seu aplicativo é resiliente a falhas, causando essas falhas em um ambiente controlado. Neste artigo, você causa um failover do Azure Cosmos DB de leitura múltipla e gravação única usando um experimento de caos e o Azure Chaos Studio. A execução desta experiência pode ajudá-lo a defender-se contra a perda de dados quando ocorre um evento de failover.

Você pode usar essas mesmas etapas para configurar e executar um experimento para qualquer falha direta de serviço. Uma falha direta de serviço é executada diretamente em um recurso do Azure sem qualquer necessidade de instrumentação, ao contrário das falhas baseadas em agente, que exigem a instalação do agente de caos.

Pré-requisitos

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
  • Uma conta do Azure Cosmos DB. Se você não tiver uma conta do Azure Cosmos DB, poderá criar uma.
  • Pelo menos uma configuração de região de leitura e uma configuração de região de gravação para sua conta do Azure Cosmos DB.

Abrir o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo gratuito que você pode usar para executar as etapas neste artigo. Tem as ferramentas comuns do Azure pré-instaladas e configuradas para utilização com a sua conta.

Para abrir o Cloud Shell, selecione Experimente no canto superior direito de um bloco de código. Você também pode abrir o Cloud Shell em uma guia separada do navegador indo para Bash. Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e selecione Enter para executá-lo.

Se você quiser instalar e usar a CLI localmente, este tutorial requer a CLI do Azure versão 2.0.30 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Nota

Estas instruções usam um terminal Bash no Cloud Shell. Alguns comandos podem não funcionar como descrito se você estiver executando a CLI localmente ou em um terminal do PowerShell.

Habilite o Chaos Studio em sua conta do Azure Cosmos DB

O Chaos Studio não pode injetar falhas em um recurso, a menos que esse recurso tenha sido adicionado ao Chaos Studio primeiro. Você adiciona um recurso ao Chaos Studio criando um destino e recursos no recurso. As contas do Azure Cosmos DB têm apenas um tipo de destino (service-direct) e uma capacidade (failover). Outros recursos podem ter até dois tipos de destino. Um tipo de destino é para falhas diretas de serviço. Outro tipo de destino é para falhas baseadas em agente. Outros recursos podem ter muitos outros recursos.

  1. Crie um destino substituindo $RESOURCE_ID pelo ID do recurso que você está adicionando. Substitua $TARGET_TYPEpelo tipo de destino que você está adicionando:

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

    Por exemplo, se você estiver adicionando uma máquina virtual como um destino direto de serviço:

    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. Crie os recursos no destino substituindo $RESOURCE_ID pelo ID do recurso que você está adicionando. Substitua $TARGET_TYPEpelo tipo de destino que você está adicionando. Substitua $CAPABILITYpelo nome do recurso de falha que você está habilitando.

    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\":{}}"
    

    Por exemplo, se você estiver habilitando o recurso de desligamento da máquina virtual:

    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\":{}}"
    

Agora você adicionou com êxito sua conta do Azure Cosmos DB ao Chaos Studio.

Criar uma experimentação

Agora você pode criar seu experimento. Um experimento de caos define as ações que você deseja tomar em relação aos recursos de destino. As ações são organizadas e executadas em etapas sequenciais. O experimento do caos também define as ações que você deseja tomar contra ramificações, que são executadas em paralelo.

  1. Formule seu experimento JSON começando com o seguinte exemplo de JSON. Modifique o JSON para corresponder ao experimento que você deseja executar usando a API Create Experiment e a biblioteca de falhas.

    {
      "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/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/chaosstudiodemo/providers/Microsoft.DocumentDB/databaseAccounts/myDB/providers/Microsoft.Chaos/targets/Microsoft-CosmosDB"
              }
            ]
          }
        ]
      }
    }
    
  2. Crie o experimento usando a CLI do Azure. Substitua $SUBSCRIPTION_ID, $RESOURCE_GROUPe $EXPERIMENT_NAME pelas propriedades do experimento. Certifique-se de que guardou e carregou a sua experiência JSON. Atualize experiment.json com seu nome de arquivo 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
    

    Cada experimento cria uma identidade gerenciada atribuída ao sistema correspondente. Observe o ID principal dessa identidade na resposta para a próxima etapa.

Dê permissão ao experimento para sua conta do Azure Cosmos DB

Quando você cria um experimento de caos, o Chaos Studio cria uma identidade gerenciada atribuída ao sistema que executa falhas contra seus recursos de destino. Essa identidade deve receber permissões apropriadas para o recurso de destino para que o experimento seja executado com êxito.

Dê ao experimento acesso aos seus recursos usando o comando a seguir. Substitua $EXPERIMENT_PRINCIPAL_ID pelo ID principal da etapa anterior. Substitua $RESOURCE_ID pelo ID do recurso de destino. Nesse caso, é a ID de recurso da instância do Azure Cosmos DB. Altere a função para a função interna apropriada para esse tipo de recurso. Execute este comando para cada recurso direcionado em seu experimento.

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

Execute a sua experiência

Agora você está pronto para executar seu experimento. Para ver o efeito, recomendamos que você abra a visão geral da conta do Azure Cosmos DB e vá para Replicar dados globalmente em uma guia separada do navegador. Atualize periodicamente durante o experimento para mostrar a troca de região.

  1. Inicie o experimento usando a CLI do Azure. Substitua $SUBSCRIPTION_ID, $RESOURCE_GROUPe $EXPERIMENT_NAME pelas propriedades do experimento.

    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. A resposta inclui uma URL de status que você pode usar para consultar o status do experimento à medida que o experimento é executado.

Próximos passos

Agora que você executou um experimento direto de serviço do Azure Cosmos DB, está pronto para: