다음을 통해 공유


Azure CLI에서 서비스 직접 오류를 사용하는 카오스 실험 만들기

카오스 실험을 사용하여 제어된 환경에서 이러한 오류를 발생시켜 애플리케이션이 오류에 대해 복원력이 있는지 확인할 수 있습니다. 이 문서에서는 카오스 실험과 Azure Chaos Studio를 사용하여 다중 읽기, 단일 쓰기 Azure Cosmos DB 장애 조치(failover)를 발생시킵니다. 이 실험을 실행하면 장애 조치(failover) 이벤트가 발생할 때 데이터 손실을 방지하는 데 도움이 될 수 있습니다.

이러한 동일한 단계를 사용하여 서비스 직접 오류에 대한 실험을 설정하고 실행할 수 있습니다. 서비스 직접 오류는 카오스 에이전트를 설치해야 하는 에이전트 기반 오류와 달리, 계측하지 않아도 Azure 리소스에 대해 직접 실행됩니다.

필수 구성 요소

  • Azure 구독 Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
  • Azure Cosmos DB 계정. Azure Cosmos DB 계정이 없으면 계정을 만들 수 있습니다.
  • Azure Cosmos DB 계정에 대한 하나 이상의 읽기 및 하나의 쓰기 지역 설정

‘Azure Cloud Shell 열기’

Azure Cloud Shell은 이 문서의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 공용 Azure 도구가 사전 설치되어 계정에서 사용하도록 구성되어 있습니다.

Cloud Shell을 열려면 코드 블록의 오른쪽 위 모서리에 있는 사용해 보기를 선택합니다. 또한 Bash로 이동하여 별도의 브라우저 탭에서 Cloud Shell을 열 수도 있습니다. 복사를 선택하여 코드 블록을 복사하고 Cloud Shell에 붙여넣은 다음 입력을 선택하여 실행합니다.

이 자습서에서 CLI를 로컬로 설치하여 사용하려면 Azure CLI 버전 2.0.30 이상이 필요합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

참고 항목

이러한 지침에서는 Cloud Shell의 Bash 터미널을 사용합니다. CLI를 로컬로 실행하거나 PowerShell 터미널에서 실행하는 경우 일부 명령이 설명대로 작동하지 않을 수 있습니다.

Azure Cosmos DB 계정에서 Chaos Studio 사용

Chaos Studio는 리소스가 먼저 Chaos Studio에 추가되지 않는 한 리소스에 대해 오류를 주입할 수 없습니다. 리소스에 대상과 기능을 만들어 리소스를 Chaos Studio에 추가합니다. Azure Cosmos DB 계정에는 하나의 대상 유형(서비스 직접)과 하나의 기능(장애 조치(failover))만 있습니다. 다른 리소스에는 최대 두 가지 대상 유형이 있을 수 있습니다. 한 가지 대상 유형은 서비스 직접 오류에 대한 것입니다. 또 다른 대상 유형은 에이전트 기반 오류에 대한 것입니다. 다른 리소스에도 다른 많은 기능이 있을 수 있습니다.

  1. $RESOURCE_ID를 추가하는 리소스의 리소스 ID로 바꾸어 대상을 만듭니다. $TARGET_TYPE추가하는 대상 유형으로 바꿉니다.

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

    예를 들어 가상 머신을 서비스 직접 대상으로 추가하는 경우:

    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. $RESOURCE_ID를 추가하는 리소스의 리소스 ID로 바꿔 대상에 대한 기능을 만듭니다. $TARGET_TYPE추가하는 대상 유형으로 바꿉니다. $CAPABILITY사용하려는 오류 기능의 이름으로 바꿉니다.

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

    예를 들어 가상 머신 종료 기능을 사용하도록 설정하는 경우:

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

이제 Azure Cosmos DB 계정을 Chaos Studio에 성공적으로 추가했습니다.

실험 만들기

이제 실험을 만들 수 있습니다. 카오스 실험은 대상 리소스에 대해 수행하려는 작업을 정의합니다. 작업은 순차적 단계로 구성되고 실행됩니다. 카오스 실험은 병렬로 실행되는 분기에 대해 수행하려는 작업도 정의합니다.

  1. 다음 JSON 샘플부터 실험 JSON을 작성합니다. 실험 만들기 API오류 라이브러리를 사용하여 실행할 실험과 일치하도록 JSON을 수정합니다.

    {
      "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. Azure CLI를 사용하여 실험을 만듭니다. $SUBSCRIPTION_ID, $RESOURCE_GROUP$EXPERIMENT_NAME을 실험에 맞는 속성으로 바꿉니다. 실험 JSON을 저장하고 업로드했는지 확인합니다. JSON 파일 이름으로 experiment.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
    

    각 실험에서 해당 시스템이 할당한 관리 ID를 만듭니다. 다음 단계에 대한 응답에서 이 ID의 보안 주체 ID를 기록해 둡니다.

Azure Cosmos DB 계정에 실험 권한 부여

카오스 실험을 만들 때 Chaos Studio는 대상 리소스에 대해 오류를 실행하는 시스템이 할당한 관리 ID를 만듭니다. 실험을 성공적으로 실행하려면 이 ID에 대상 리소스에 대한 적절한 권한을 부여해야 합니다.

다음 명령을 사용하여 실험에 리소스에 대한 액세스 권한을 부여합니다. $EXPERIMENT_PRINCIPAL_ID를 이전 단계의 보안 주체 ID로 바꿉니다. $RESOURCE_ID를 대상 리소스의 리소스 ID로 바꿉니다. 이 경우 Azure Cosmos DB 인스턴스 리소스 ID입니다. 역할을 해당 리소스 종류에 적절한 기본 제공 역할로 변경합니다. 실험에서 대상으로 지정된 각 리소스에 대해 이 명령을 실행합니다.

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

실험 실행

이제 실험을 실행할 준비가 되었습니다. 효과를 보려면 Azure Cosmos DB 계정 개요를 열고 별도의 브라우저 탭에서 전역적으로 데이터 복제로 이동하는 것이 좋습니다. 실험 중에 주기적으로 새로 고쳐서 지역 교환을 표시합니다.

  1. Azure CLI를 사용하여 실험을 시작합니다. $SUBSCRIPTION_ID, $RESOURCE_GROUP$EXPERIMENT_NAME을 실험에 맞는 속성으로 바꿉니다.

    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. 응답에는 실험이 실행될 때 실험 상태를 쿼리하는 데 사용할 수 있는 상태 URL이 포함됩니다.

다음 단계

이제 Azure Cosmos DB 서비스 직접 실험을 실행했으므로 다음을 수행할 준비가 되었습니다.