Canary 릴리스 배포 생성 - Amazon API Gateway

Canary 릴리스 배포 생성

API를 배포할 때 Canary 설정배포 생성 작업에 대한 추가 입력으로 사용하여 Canary 릴리스 배포를 생성합니다.

stage:update를 요청하여 단계에서 Canary 설정을 추가하는 방법으로 기존의 비 Canary 배포에서 Canary 릴리스 배포를 생성할 수도 있습니다.

비Canary 릴리스 배포를 생성할 때 기존 단계 이름이 아닌 이름을 지정할 수 있습니다. 지정한 단계가 없는 경우, API Gateway가 단계를 생성합니다. 하지만 Canary 릴리스 배포를 생성할 때는 기존 단계 이름이 아닌 이름을 지정할 수 없습니다. 그러면 오류가 발생하고 API Gateway가 Canary 릴리스 배포를 생성하지 않습니다.

API Gateway 콘솔, AWS CLI 또는 AWS SDK를 사용하여 API Gateway에서 Canary 릴리스 배포를 생성할 수 있습니다.

API Gateway 콘솔을 사용하여 Canary 배포 생성

API Gateway 콘솔을 사용하여 Canary 릴리스 배포를 생성하려면 아래 지침에 따릅니다.

초기 Canary 릴리스 배포를 생성하려면
  1. API Gateway 콘솔에 로그인합니다.

  2. 기존 REST API를 선택하거나 새 REST API를 생성합니다.

  3. 기본 탐색 창에서 리소스를 선택한 다음 API 배포를 선택합니다. API 배포I에서 화면 지침에 따라 새 단계에 API를 배포합니다.

    지금까지 프로덕션 릴리스 단계에 API를 배포했습니다. 다음으로 단계에서 Canary 설정을 구성하고, 필요하다면 캐싱을 활성화하거나 단계 변수를 설정하거나 API 실행 로그 또는 액세스 로그를 구성합니다.

  4. API 캐싱을 활성화하거나 AWS WAF 웹 ACL을 스테이지에 연결하려면 스테이지 세부 정보 섹션에서 편집을 선택합니다. 자세한 내용은 API Gateway의 REST API 캐시 설정 또는 API Gateway 콘솔을 사용하여 API Gateway API 단계와 AWS WAF 웹 ACL을 연결하는 방법을 참조하세요.

  5. 실행 로깅 또는 액세스 로깅을 구성하려면 로그 및 추적 섹션에서 편집을 선택하고 화면 지침에 따릅니다. 자세한 내용은 API Gateway에서 REST API에 대한 CloudWatch 로깅 설정 단원을 참조하십시오.

  6. 스테이지 변수를 설정하려면 스테이지 변수 탭을 선택하고 화면 지침에 따라 스테이지 변수를 추가하거나 수정합니다. 자세한 내용은 API Gateway에서 REST API용 스테이지 변수 사용 단원을 참조하십시오.

  7. Canary 탭을 선택한 후 Canary 생성을 선택합니다. Canary 탭을 표시하려면 오른쪽 화살표 버튼을 선택해야 할 수도 있습니다.

  8. Canary 설정에서 Canary에 Canary로 전환할 요청의 비율을 입력합니다.

  9. 필요한 경우 스테이지 캐시를 선택하여 Canary 릴리스에 대한 캐싱을 활성화합니다. API 캐싱이 활성화될 때까지는 Canary 릴리스에 캐시를 사용할 수 없습니다.

  10. 기존 스테이지 변수를 재정의하려면 Canary 재정의에 새 스테이지 변수 값을 입력합니다.

배포 단계에서 Canary 릴리스가 초기화된 후 API를 변경하고 변경을 테스트하는 것이 좋습니다. 업데이트된 버전과 기본 버전에 동일한 단계를 통해 액세스할 수 있도록 API를 같은 단계에 다시 배포할 수 있습니다. 다음 단계에서 그 방법을 설명합니다.

Canary에 최신 API 버전을 배포하려면
  1. API를 업데이트할 때마다 API 배포를 선택합니다.

  2. API 배포에서 Canary가 포함된 스테이지를 배포 스테이지 드롭다운 목록에서 선택합니다.

  3. (선택 사항) 배포 설명에 설명을 입력합니다.

  4. 최신 API 버전을 Canary 릴리스에 푸시하려면 배포(Deploy)를 선택합니다.

  5. 원한다면 초기 Canary 릴리스 배포를 생성하려면의 설명대로 단계 설정, 로그 또는 Canary 설정을 다시 구성하세요.

결과적으로 Canary 릴리스는 최신 버전을 가리키고, 프로덕션 릴리스는 여전히 API 초기 버전을 가리키게 됩니다. canarySettings에는 이제 새 deploymentId 값이 있는 반면, 단계에는 여전히 초기 deploymentId 값이 있습니다. 백그라운드에서 콘솔이 stage:update를 호출합니다.

AWS CLI를 사용하여 Canary 배포 생성

먼저 Canary 없이 2개의 단계 변수로 기준 배포를 생성합니다.

aws apigateway create-deployment \ --variables sv0=val0,sv1=val1 \ --rest-api-id abcd1234 \ --stage-name 'prod' \

명령은 결과로 얻은 다음과 비슷한 Deployment 표현을 반환합니다.

{ "id": "du4ot1", "createdDate": 1511379050 }

이렇게 얻은 배포 id는 API의 스냅샷(또는 버전)을 식별합니다.

이제 prod 단계에서 Canary 배포를 생성합니다.

aws apigateway create-deployment --rest-api-id abcd1234 \ --canary-settings \ '{ "percentTraffic":10.5, "useStageCache":false, "stageVariableOverrides":{ "sv1":"val2", "sv2":"val3" } }' \ --stage-name 'prod'

지정된 단계(prod)가 존재하지 않으면 앞의 명령은 오류를 반환합니다. 그렇지 않으면 새로 생성된 다음과 비슷한 배포 리소스 표현을 반환합니다.

{ "id": "a6rox0", "createdDate": 1511379433 }

이렇게 얻은 배포 id는 Canary 릴리스의 API 테스트 버전을 식별합니다. 그 결과, 연결된 단계는 Canary가 활성화됩니다. 다음과 비슷한 get-stage 명령을 호출하여 이 단계 표현을 볼 수 있습니다.

aws apigateway get-stage --rest-api-id acbd1234 --stage-name prod

다음은 Stage의 표현을 명령의 출력으로 보여 줍니다.

{ "stageName": "prod", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "du4ot1", "lastUpdatedDate": 1511379433, "createdDate": 1511379050, "canarySettings": { "percentTraffic": 10.5, "deploymentId": "a6rox0", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" } }, "methodSettings": {} }

이 예에서 API 기본 버전은 단계 변수 {"sv0":val0", "sv1":val1"}을 사용하며, 테스트 버전은 단계 변수 {"sv1":val2", "sv2":val3"}를 사용합니다. 프로덕션 릴리스와 Canary 릴리스는 모두 동일한 단계 변수 sv1을 사용하지만 값은 서로 달라서 각각 val1val2입니다. 단계 변수 sv0은 프로덕션 릴리스에서만 사용되며, 단계 변수 sv2는 Canary 릴리스에서만 사용됩니다.

Canary를 활성화하도록 단계를 업데이트하여 기존 일반 배포에서 Canary 릴리스 배포를 생성할 수 있습니다. 이를 보여 주려면 먼저 일반 배포를 생성하세요.

aws apigateway create-deployment \ --variables sv0=val0,sv1=val1 \ --rest-api-id abcd1234 \ --stage-name 'beta'

이 명령은 기본 버전 배포의 표현을 반환합니다.

{ "id": "cifeiw", "createdDate": 1511380879 }

연결된 베타 단계에는 Canary 설정이 없습니다.

{ "stageName": "beta", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "cifeiw", "lastUpdatedDate": 1511380879, "createdDate": 1511380879, "methodSettings": {} }

이제 단계에서 Canary를 연결하여 새 Canary 릴리스 배포를 생성합니다.

aws apigateway update-stage \ --rest-api-id abcd1234 \ --stage-name 'beta' \ --patch-operations '[{ "op": "replace", "value": "0.0", "path": "/canarySettings/percentTraffic" }, { "op": "copy", "from": "/canarySettings/stageVariableOverrides", "path": "/variables" }, { "op": "copy", "from": "/canarySettings/deploymentId", "path": "/deploymentId" }]'

업데이트된 단계의 표현은 다음과 같습니다.

{ "stageName": "beta", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "cifeiw", "lastUpdatedDate": 1511381930, "createdDate": 1511380879, "canarySettings": { "percentTraffic": 10.5, "deploymentId": "cifeiw", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" } }, "methodSettings": {} }

기존 API 버전에서 방금 Canary를 활성화했기 때문에 프로덕션 릴리스(Stage)와 Canary 릴리스(canarySettings)는 모두 동일한 배포, 즉 API의 동일 버전(deploymentId)을 가리킵니다. API를 변경하여 이 단계에 다시 배포한 후 새 버전은 Canary 릴리스에 있게 되고, 기본 버전은 프로덕션 릴리스에 남게 됩니다. 이것은 Canary 릴리스의 deploymentId가 새 배포 id로 업데이트되고 프로덕션 릴리스의 deploymentId가 변경되지 않고 남아 있는 단계 변화에서 확인할 수 있습니다.