가중치 별칭을 사용한 Lambda 카나리아 배포 구현
가중치 별칭을 사용한 Lambda 카나리아 배포 구현 (Implement Lambda canary deployments using a weighted alias)
가중치 별칭(weighted alias)을 사용해 같은 함수의 두 버전 간에 트래픽을 분할할 수 있어요. 이 접근 방식으로 함수의 새 버전을 작은 비율의 트래픽으로 테스트하고 필요하면 빠르게 롤백할 수 있어요. 이것을 카나리아 배포라고 해요. 카나리아 배포는 모든 트래픽을 한 번에 전환하지 않고 요청의 일부에만 새 버전을 노출한다는 점에서 블루/그린 배포와 달라요.
본문
별칭은 최대 두 개의 Lambda 함수 버전을 가리킬 수 있어요. 버전은 다음 기준을 충족해야 해요.
- 두 버전 모두 동일한 실행 역할을 가져야 해요.
- 두 버전 모두 동일한 데드 레터 큐 구성을 가지거나 데드 레터 큐 구성이 없어야 해요.
- 두 버전 모두 게시되어야 해요. 별칭은
$LATEST를 가리킬 수 없어요.
참고
Lambda는 단순한 확률 모델을 사용해 두 함수 버전 간에 트래픽을 분배해요. 낮은 트래픽 수준에서는 각 버전에 구성된 트래픽 비율과 실제 비율 사이에 큰 변동이 보일 수 있어요. 함수가 프로비저닝된 동시성을 사용한다면 별칭 라우팅이 활성화된 동안 더 많은 수의 프로비저닝된 동시성 인스턴스를 구성해 스필오버 호출을 피할 수 있어요.
가중치 별칭 만들기 (Create a weighted alias)
콘솔
콘솔을 사용해 별칭에 라우팅 구성
참고
함수에 게시된 버전이 두 개 이상 있는지 확인하세요. 추가 버전을 만들려면 함수 버전 생성의 지침을 따르세요.
- Lambda 콘솔의 Functions 페이지를 열어요.
- 함수를 선택해요.
- Aliases 를 선택한 다음 Create alias 를 선택해요.
- Create alias 페이지에서 다음을 수행해요.
- 별칭의 Name 을 입력해요.
- (선택 사항) 별칭의 Description 을 입력해요.
- Version 에서 별칭이 가리키길 원하는 첫 번째 함수 버전을 선택해요.
- Weighted alias 를 확장해요.
- Additional version 에서 별칭이 가리키길 원하는 두 번째 함수 버전을 선택해요.
- Weight (%) 에 함수의 가중치 값을 입력해요. Weight 는 별칭이 호출될 때 해당 버전에 할당되는 트래픽의 백분율이에요. 첫 번째 버전은 나머지 가중치를 받아요. 예를 들어 Additional version 에 10%를 지정하면 첫 번째 버전에 자동으로 90%가 할당돼요.
- 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으로 롤링 배포를 만드는 방법에 대한 자세한 내용은 다음을 참고하세요.