Azure Container Apps에서 트래픽 분할

기본적으로 수신이 사용하도록 설정되면 모든 트래픽이 최신 배포 수정 버전으로 라우팅됩니다. 컨테이너 앱에서 여러 수정 모드를 사용하도록 설정하면 들어오는 트래픽을 활성 수정 버전 간에 분할할 수 있습니다.

트래픽 분할은 컨테이너 앱에 대한 업데이트를 테스트하는 데 유용합니다. 트래픽 분할을 사용하여 파란색-녹색 배포 또는 A/B 테스트에서 새 수정 버전에서 점진적으로 단계화할 수 있습니다.

트래픽 분할은 각 수정 버전으로 라우팅되는 트래픽의 가중치(백분율)를 기반으로 합니다. 모든 트래픽 분할 규칙의 결합된 가중치는 100%와 같아야 합니다. 수정 버전 이름 또는 수정 레이블로 수정 버전을 지정할 수 있습니다.

이 문서에서는 컨테이너 앱에 대한 트래픽 분할 규칙을 구성하는 방법을 보여줍니다. 다음 예제를 실행하려면 여러 수정 버전이 있는 컨테이너 앱이 필요합니다.

트래픽 분할 구성

az containerapp ingress traffic set 명령을 사용하여 수정 버전 간에 트래픽 분할을 구성합니다. --revision-weight 매개 변수를 사용하여 이름으로 수정 버전을 지정하거나 --label-weight 매개 변수를 사용하여 수정 레이블로 수정 버전을 지정할 수 있습니다.

다음 명령은 각 수정 버전에 대한 트래픽 가중치를 50%로 설정합니다.

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --revision-weight <REVISION_1>=50 <REVISION_2>=50

<>(으)로 둘러싸인 자리 표시자 값을 사용자 고유의 값으로 바꿔야 합니다.

이 명령은 수정 버전 <LABEL_1> 트래픽 가중치를 80%로 설정하고 수정 버전 <LABEL_2>를 20%로 설정합니다.

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --label-weight <LABEL_1>=80 <LABEL_2>=20

  1. Azure Portal에서 컨테이너 앱으로 이동합니다.
  2. 왼쪽 메뉴에서 수정 버전 관리를 선택합니다.
  3. 수정 모드가 Single이면 모드를 다중으로 설정합니다.
    1. 수정 모드 선택을 선택합니다.
    2. 다중: 여러 수정 버전이 동시에 활성화됨을 선택합니다.
    3. 적용을 선택합니다.
    4. 수정 모드다중 모드로 업데이트되기를 기다립니다. Screenshot of the revision management revision mode setting.
  4. 비활성 수정 버전 표시를 선택합니다.
  5. 수정 버전이 여러 개 없는 경우 새 수정 버전을 만들 수 있습니다.
    1. 새 수정 버전 만들기를 선택합니다.
    2. 기본 설정을 사용하거나 수정 버전을 사용자 지정할 수 있습니다.
    3. 수정 버전에 대한 이름/접미사를 입력합니다.
    4. 만들기를 실행합니다. Screenshot of Create and deploy new revision.
    5. 수정 버전이 배포되기를 기다립니다.
  6. 트래픽을 라우팅하려는 수정 버전에 대해 활성을 선택합니다.
  7. 트래픽 열에서 각 수정 버전으로 라우팅하려는 트래픽의 백분율을 입력합니다. 모든 트래픽의 결합 비율은 100%여야 합니다.
  8. 저장을 선택합니다. Screenshot of traffic splitting in Revision management.

컨테이너 앱 템플릿의 ingress 섹션에 configuration.ingress.traffic 속성을 추가하여 트래픽 분할을 사용하도록 설정합니다. revisionName 속성을 사용하여 이름으로 수정 버전을 지정하거나 label 속성을 사용하여 수정 레이블로 수정 버전을 지정할 수 있습니다.

다음 예제에서는 트래픽의 100%를 배포된 최신 수정 버전으로 설정합니다.

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
        {
          "latestRevision": true,
          "weight": 100
        }
      ]
    },
  },

다음 예제에서는 두 수정 버전 간에 이름으로 분할되는 트래픽을 보여 줍니다.

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "revisionName": "my-example-app--5g3ty20",
              "weight": 50
          },
          {
              "revisionName": "my-example-app--qcfkbsv",
              "weight": 50
            }
        ],
    },
  },

다음 예제에서는 레이블별로 두 수정 버전 간에 분할되는 트래픽을 보여 줍니다.

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "weight": 50,
              "label": "v-2"
          },
          {
              "weight": 50,
              "label": "v-1"
          }
        ],
    },
  },

사용 사례

다음 시나리오에서는 일반적인 사용 사례의 구성 설정을 설명합니다. 예제는 JSON 형식으로 표시되지만 Azure Portal 또는 Azure CLI를 사용하여 트래픽 분할을 구성할 수도 있습니다.

신속한 반복

컨테이너 앱 개발을 자주 반복하는 경우 항상 모든 트래픽을 배포된 최신 수정 버전으로 이동하도록 트래픽 규칙을 설정할 수 있습니다.

다음 예제 템플릿은 모든 트래픽을 배포된 최신 수정 버전으로 라우팅합니다.

"ingress": { 
  "traffic": [
    {
      "latestRevision": true,
      "weight": 100
    }
  ]
}

최신 수정 버전에 만족한다면 ingress 설정을 다음으로 업데이트하여 해당 수정 버전으로 트래픽을 잠글 수 있습니다.

"ingress": { 
  "traffic": [
    {
      "latestRevision": false, // optional
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    }
  ]
}

기존 수정 버전 업데이트

트래픽의 100%를 처리하는 알려진 양호한 수정 버전이 있지만 앱에 대한 업데이트를 발급하려는 상황을 고려해 보겠습니다. 앱을 처리하는 주 수정 버전에 영향을 주지 않고 직접 엔드포인트를 사용하여 새 수정 버전을 배포하고 테스트할 수 있습니다.

업데이트된 수정 버전에 만족한다면 테스트 및 확인을 위해 트래픽의 일부를 새 수정 버전으로 이동하면 됩니다.

다음 템플릿은 트래픽의 20%를 업데이트된 수정 버전으로 이동하는 방법을 보여 줍니다.

"ingress": {
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 80
    },
    {
      "revisionName": "myapp--newerrevision",
      "weight": 20
    }
  ]
}

마이크로 서비스 준비

마이크로 서비스를 빌드할 때 동일한 앱에 대한 프로덕션 및 준비 엔드포인트를 유지 관리할 수 있습니다. 레이블을 사용하여 트래픽이 서로 다른 수정 버전 간에 전환되지 않도록 합니다.

다음 예제 템플릿은 다른 수정 버전에 레이블을 적용합니다.

"ingress": { 
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    },
    {
      "revisionName": "myapp--98fdgt",
      "weight": 0,
      "label": "staging"
    }
  ]
}

다음 단계