가중치 별칭을 사용하여 Lambda 카나리 배포 구현 - AWS Lambda

가중치 별칭을 사용하여 Lambda 카나리 배포 구현

가중치가 적용된 별칭을 사용하여 동일한 함수의 서로 다른 두 버전 간에 트래픽을 분할할 수 있습니다. 이 접근 방식을 사용하면 적은 비율의 트래픽으로 함수의 새 버전을 테스트하고 필요한 경우 빠르게 롤백할 수 있습니다. 이를 카나리 배포라고 합니다. 카나리 배포는 모든 트래픽을 한 번에 전환하는 대신 새 버전을 요청의 일부에만 노출하여 블루/그린 배포와 다릅니다.

별칭이 최대 두 개의 Lambda 함수 버전을 가리키도록 설정할 수 있습니다. 버전은 다음 기준을 충족해야 합니다.

  • 두 버전이 동일한 실행 역할을 가져야 합니다.

  • 두 버전 모두 동일한 배달 못한 편지 대기열 구성을 가져야 하거나 배달 못한 편지 대기열 구성이 없어야 합니다.

  • 두 버전 모두 게시해야 합니다. 별칭은 $LATEST을 가리킬 수 없습니다.

참고

Lambda는 간단한 확률 모델을 사용하여 두 함수 버전 간에 트래픽을 분산시킵니다. 트래픽 수준이 낮으면 각 버전에서 구성된 트래픽과 실제 트래픽의 비율 간에 큰 차이가 나타날 수 있습니다. 함수가 프로비저닝된 동시성을 사용하는 경우 별칭 라우팅이 활성 상태인 동안 더 많은 수의 프로비전된 동시성 인스턴스를 구성하여 초과(spillover) 호출을 방지할 수 있습니다.

가중치가 적용된 별칭 생성

Console
콘솔을 사용하여 별칭에 대한 라우팅 구성하기
참고

함수에 게시된 버전이 두 개 이상 있는지 확인합니다. 추가 버전을 생성하려면 함수 버전 생성의 지침을 따르세요.

  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수를 선택합니다.

  3. 별칭(Aliases)을 선택한 다음 별칭 생성(Create alias)을 선택합니다.

  4. 별칭 생성(Create alias) 페이지에서 다음을 수행합니다.

    1. 별칭의 이름(Name)을 입력합니다.

    2. (선택 사항) 경보에 대한 설명(Description)을 입력합니다.

    3. 버전(Version)에서 별칭이 가리키도록 할 첫 번째 함수 버전을 선택합니다.

    4. 가중치 기반 별칭(Weighted alias)을 확장합니다.

    5. 추가 버전(Additional version)에서 별칭이 가리킬 두 번째 함수 버전을 선택합니다.

    6. 가중치(Weight)(%)에서 함수의 가중치 값을 입력합니다. 가중치는 별칭이 간접 호출될 때 해당 버전에 할당되는 트래픽의 비율입니다. 첫 번째 버전에는 남은 가중치가 할당됩니다. 예를 들어 Additional version(추가 버전)에 10%를 지정할 경우 첫 번째 버전에 자동으로 90%가 할당됩니다.

    7. Save(저장)를 선택합니다.

AWS CLI

create-aliasupdate-alias AWS CLI 명령을 사용하여 두 함수 버전 간의 트래픽 가중치를 구성합니다. 별칭을 만들거나 업데이트할 때 routing-config 파라미터에 트래픽 가중치를 지정합니다.

다음 예에서는 함수의 버전 1을 가리키는 routing-alias라는 Lambda 함수 별칭을 생성합니다. 함수의 버전 2는 트래픽의 3%를 수신합니다. 나머지 97%의 트래픽은 버전 1로 라우팅됩니다.

aws lambda create-alias \ --name routing-alias \ --function-name my-function \ --function-version 1 \ --routing-config AdditionalVersionWeights={"2"=0.03}

update-alias 명령을 사용하여 버전 2로 들어오는 트래픽의 비율을 늘립니다. 다음 예에서는 트래픽을 5%로 늘립니다.

aws lambda update-alias \ --name routing-alias \ --function-name my-function \ --routing-config AdditionalVersionWeights={"2"=0.05}

모든 트래픽을 버전 2로 라우팅하려면 update-alias 명령을 사용하여 별칭이 버전 2를 가리키도록 function-version 속성을 변경합니다. 이 명령은 라우팅 구성도 재설정합니다.

aws lambda update-alias \ --name routing-alias \ --function-name my-function \ --function-version 2 \ --routing-config AdditionalVersionWeights={}

이전 단계의 AWS CLI 명령은 다음 Lambda API 작업에 해당합니다.

간접 호출된 버전 확인

두 함수 버전 간에 트래픽 가중치를 구성할 때 간접 호출된 Lambda 함수 버전을 확인하는 방법은 두 가지가 있습니다.

  • CloudWatch Logs – 매 함수 간접 호출 시 Lambda가 간접 호출된 버전 ID를 포함한 START 로그 항목을 자동으로 내보냅니다. 예시:

    START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version: 2

    별칭 간접 호출을 위해 Lambda는 ExecutedVersion 차원을 사용하여 간접 호출된 버전을 기준으로 지표 데이터를 필터링합니다. 자세한 내용은 Lambda 함수에 대한 지표 보기 단원을 참조하십시오.

  • 응답 페이로드(동기식 간접 호출) – 동기식 함수 간접 호출에 대한 응답에 간접 호출된 함수 버전을 나타내는 x-amz-executed-version 헤더가 포함되어 있습니다.

가중치가 적용된 별칭을 사용하여 롤링 배포 생성

AWS CodeDeploy 및 AWS Serverless Application Model(AWS SAM) 항목을 사용하여 함수 코드의 변경 사항을 자동으로 감지하고, 함수의 새 버전을 배포하고, 새 버전으로 흐르는 트래픽 양을 점진적으로 늘리는 롤링 배포를 생성합니다. 트래픽 양과 증가 속도는 구성이 가능한 파라미터입니다.

롤링 배포에서 AWS SAM는 다음 작업을 수행합니다.

  • Lambda 함수를 구성하고 별칭을 생성합니다. 별칭 가중치 라우팅 구성은 롤링 배포 구현의 기반이 되는 기능입니다.

  • CodeDeploy 애플리케이션 및 배포 그룹을 생성합니다. 배포 그룹은 롤링 배포 및 롤백(필요한 경우)을 관리합니다.

  • 내 Lambda 함수의 새 버전이 생성될 때 이를 감지합니다.

  • 새 버전의 배포를 시작하도록 CodeDeploy를 트리거합니다.

예제 AWS SAM 템플릿

다음 예제는 간단한 롤링 배포를 위한 AWS SAM 템플릿을 보여줍니다.

AWSTemplateFormatVersion : '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: A sample SAM template for deploying Lambda functions Resources: # Details about the myDateTimeFunction Lambda function myDateTimeFunction: Type: AWS::Serverless::Function Properties: Handler: myDateTimeFunction.handler Runtime: nodejs18.x # Creates an alias named "live" for the function, and automatically publishes when you update the function. AutoPublishAlias: live DeploymentPreference: # Specifies the deployment configuration Type: Linear10PercentEvery2Minutes

이 템플릿은 다음 속성을 가진 myDateTimeFunction이라는 Lambda 함수를 정의합니다.

AutoPublishAlias

AutoPublishAlias 속성은 live라는 별칭을 생성합니다. 또한 AWS SAM 프레임워크는 함수에 대한 새 코드를 저장할 때 이를 자동으로 감지합니다. 그러면 프레임워크가 새 함수 버전을 게시하고 새 버전을 가리키도록 live 별칭을 업데이트합니다.

DeploymentPreference

DeploymentPreference 속성은 CodeDeploy 애플리케이션이 Lambda 함수의 원래 버전에서 새 버전으로 트래픽을 이동시키는 속도를 결정합니다. 값이 Linear10PercentEvery2Minutes면 트래픽의 10%가 2분마다 새 버전으로 새롭게 이동됩니다.

사전 정의된 배포 구성의 목록은 배포 구성을 참조하세요.

CodeDeploy 및 AWS SAM 항목을 사용하여 롤링 배포를 생성하는 방법에 대한 자세한 내용은 다음을 참조하세요.