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

가중치 별칭을 사용한 Lambda 카나리아 배포 구현 (Implement Lambda canary deployments using a weighted alias)

가중치 별칭(weighted alias)을 사용해 같은 함수의 두 버전 간에 트래픽을 분할할 수 있어요. 이 접근 방식으로 함수의 새 버전을 작은 비율의 트래픽으로 테스트하고 필요하면 빠르게 롤백할 수 있어요. 이것을 카나리아 배포라고 해요. 카나리아 배포는 모든 트래픽을 한 번에 전환하지 않고 요청의 일부에만 새 버전을 노출한다는 점에서 블루/그린 배포와 달라요.

출처: AWS Lambda 개발자 안내서

본문

별칭은 최대 두 개의 Lambda 함수 버전을 가리킬 수 있어요. 버전은 다음 기준을 충족해야 해요.

  • 두 버전 모두 동일한 실행 역할을 가져야 해요.
  • 두 버전 모두 동일한 데드 레터 큐 구성을 가지거나 데드 레터 큐 구성이 없어야 해요.
  • 두 버전 모두 게시되어야 해요. 별칭은 $LATEST 를 가리킬 수 없어요.

참고

Lambda는 단순한 확률 모델을 사용해 두 함수 버전 간에 트래픽을 분배해요. 낮은 트래픽 수준에서는 각 버전에 구성된 트래픽 비율과 실제 비율 사이에 큰 변동이 보일 수 있어요. 함수가 프로비저닝된 동시성을 사용한다면 별칭 라우팅이 활성화된 동안 더 많은 수의 프로비저닝된 동시성 인스턴스를 구성해 스필오버 호출을 피할 수 있어요.

가중치 별칭 만들기 (Create a weighted alias)

콘솔

콘솔을 사용해 별칭에 라우팅 구성

참고

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

  1. Lambda 콘솔의 Functions 페이지를 열어요.
  2. 함수를 선택해요.
  3. Aliases 를 선택한 다음 Create alias 를 선택해요.
  4. Create alias 페이지에서 다음을 수행해요.
    • 별칭의 Name 을 입력해요.
    • (선택 사항) 별칭의 Description 을 입력해요.
    • Version 에서 별칭이 가리키길 원하는 첫 번째 함수 버전을 선택해요.
    • Weighted alias 를 확장해요.
    • Additional version 에서 별칭이 가리키길 원하는 두 번째 함수 버전을 선택해요.
    • Weight (%) 에 함수의 가중치 값을 입력해요. Weight 는 별칭이 호출될 때 해당 버전에 할당되는 트래픽의 백분율이에요. 첫 번째 버전은 나머지 가중치를 받아요. 예를 들어 Additional version 에 10%를 지정하면 첫 번째 버전에 자동으로 90%가 할당돼요.
  5. Save 를 선택해요.

AWS CLI

create-alias와 update-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 명령을 사용해 function-version 속성을 변경해 별칭이 버전 2를 가리키게 해요. 이 명령은 라우팅 구성을 재설정해요.

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

앞선 단계의 AWS CLI 명령은 다음 Lambda API 작업에 대응해요.

호출된 버전 확인 (Determining which version was invoked)

두 함수 버전 간에 트래픽 가중치를 구성하면 호출된 Lambda 함수 버전을 확인하는 두 가지 방법이 있어요.

  • CloudWatch Logs – Lambda는 모든 함수 호출에 대해 호출된 버전 ID가 포함된 START 로그 항목을 자동으로 내보내요. 예: START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version: 2 별칭 호출의 경우 Lambda는 ExecutedVersion 차원을 사용해 호출된 버전으로 메트릭 데이터를 필터링해요. 자세한 내용은 Lambda 함수 메트릭 보기를 참고하세요.
  • 응답 페이로드(동기식 호출) – 동기식 함수 호출에 대한 응답에는 호출된 함수 버전을 나타내는 x-amz-executed-version 헤더가 포함돼요.

가중치 별칭으로 롤링 배포 만들기 (Create a rolling deployment with weighted aliases)

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: nodejs24.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 값은 2분마다 트래픽의 추가 10%를 새 버전으로 전환해요.

미리 정의된 배포 구성 목록은 배포 구성을 참고하세요.

CodeDeploy와 AWS SAM으로 롤링 배포를 만드는 방법에 대한 자세한 내용은 다음을 참고하세요.

더 알아보기 (Learn more)