기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS SAM에서 서버리스 애플리케이션의 점진적 배포
AWS Serverless Application Model(AWS SAM)는 CodeDeploy와 함께 기본 제공되므로 점진적인 AWS Lambda 배포를 제공합니다. 몇 줄의 구성만으로 AWS SAM은 귀하를 위해 다음을 수행합니다.
-
Lambda 함수의 새 버전을 배포하고 새 버전을 가리키는 별칭을 자동으로 생성합니다.
-
예상대로 작동한다고 확신할 때까지 고객 트래픽을 새 버전으로 점진적으로 이동시킵니다. 업데이트가 제대로 작동하지 않는 경우 변경 내용을 롤백할 수 있습니다.
-
새로 배포된 코드가 올바르게 구성되었고 애플리케이션이 예상대로 작동하는지 확인하는 사전 트래픽 및 사후 트래픽 테스트 함수를 정의합니다.
-
CloudWatch 경보가 트리거되면 배포를 자동으로 롤백합니다.
참고
AWS SAM 템플릿을 통해 점진적 배포를 활성화하면 CodeDeploy 리소스가 자동으로 생성됩니다. AWS Management Console를 통해 CodeDeploy 리소스를 직접 볼 수 있습니다.
예
다음 예제는 CodeDeploy를 사용하여 고객을 새로 배포된 Lambda 함수 버전으로 점진적으로 전환하는 방법을 보여줍니다.
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before & after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction
AWS SAM 템플릿의 이러한 수정 내용은 다음을 수행합니다.
-
AutoPublishAlias
: 이 속성을 추가하고 별칭 이름을 지정하면, AWS SAM:-
Lambda 함수의 Amazon S3 URI에 대한 변경 내용을 기반으로 새 코드가 배포되는 시기를 감지합니다.
-
최신 코드를 사용하여 해당 함수의 업데이트된 버전을 생성하고 게시합니다.
-
제공한 이름으로 별칭을 생성하고(별칭이 이미 존재하지 않는 경우) Lambda 함수의 업데이트된 버전을 가리킵니다. 이를 활용하려면 함수 호출 시 별칭 한정자를 사용해야 합니다. 귀하가 Lambda 함수 버전 관리 및 별칭에 익숙하지 않은 경우, 함수 버전 관리 및 별칭AWS Lambda을 잠조하세요.
-
-
Deployment Preference Type
: 이전 예시에서는 귀하의 고객 트래픽의 10%가 즉시 새 버전으로 이동합니다. 10분 후 모든 트래픽이 새 버전으로 이동합니다. 하지만 사전 트래픽 또는 사후 트래픽 테스트가 실패하거나 CloudWatch 경보가 트리거되는 경우 CodeDeploy는 배포를 롤백합니다. 다음과 같은 방법으로 버전 간에 트래픽을 이동하는 방법을 지정할 수 있습니다.-
Canary
: 트래픽이 2 증분씩 이동합니다. 사전 정의된 canary 옵션 중에서 선택할 수 있습니다. 이 옵션은 나머지 트래픽이 두 번째 증분으로 이동하기 전에 첫 증분에서 업데이트된 Lambda 함수 버전으로 이동할 트래픽 비율(%)과 간격(분)을 지정합니다. -
Linear
: 트래픽이 동일한 증분으로 이동하며 각 증분 간 시간(분)은 동일합니다. 각 증분에서 이동할 트래픽 비율(%)과 각 증분 간의 시간 간격(분)을 지정하는 사전 정의된 선형 옵션에서 선택할 수 있습니다. -
AllAtOnce
: 모든 트래픽이 기존 Lambda 함수에서 업데이트된 Lambda 함수 버전으로 한번에 이동합니다.
다음 표에는 예제에 사용된 옵션 외에 사용할 수 있는 기타 트래픽 이동 옵션이 요약되어 있습니다.
배포 기본 설정 유형 Canary10Percent30Minutes
Canary10Percent5Minutes
Canary10Percent10Minutes
Canary10Percent15Minutes
Linear10PercentEvery10Minutes
Linear10PercentEvery1Minute
Linear10PercentEvery2Minutes
Linear10PercentEvery3Minutes
AllAtOnce
-
-
Alarms
: 이들은 배포에서 발생한 오류로 인해 트리거되는 CloudWatch 경보입니다. 이들은 발생하면 귀하의 배포를 자동으로 롤백합니다. 예를 들어, 배포하려는 업데이트된 코드로 인해 애플리케이션 내에서 오류가 발생하는 경우입니다. 또 다른 예는 AWS Lambda 또는 귀하가 지정한 사용자 지정 CloudWatch 지표가 경보 임계값을 위반한 경우입니다. -
Hooks
: 이들은 새 버전으로 트래픽 이동이 시작되기 전과 트래픽 이동이 완료된 후에 검사를 실행하는 사전 트래픽 및 사후 트래픽 테스트 함수입니다.-
PreTraffic
: 트래픽 이동이 시작되기 전에 CodeDeploy는 사전 트래픽 후크 Lambda 함수를 호출합니다. 이 Lambda 함수는 CodeDeploy를 다시 호출하고 성공 또는 실패를 표시해야 합니다. 함수가 실패하면 함수가 중단되고 실패를 다시 AWS CloudFormation에 보고합니다. 함수가 성공하면 CodeDeploy는 트래픽 이동을 진행합니다. -
PostTraffic
: 트래픽 이동이 완료되면 CodeDeploy는 사후 트래픽 후크 Lambda 함수를 호출합니다. 이는 함수가 CodeDeploy를 다시 호출하여 성공 또는 실패를 보고해야 하는 사전 트래픽 후크와 유사합니다. 사후 트래픽 후크를 사용하여 통합 테스트 또는 기타 검증 작업을 실행할 수 있습니다.
자세한 내용을 알아보려면 안전 배포 SAM 참조
를 잠조하세요. -
Lambda 함수를 처음으로 점진적으로 배포
Lambda 함수를 점진적으로 배포하는 경우 CodeDeploy에서 트래픽을 이동하려면 이전에 배포한 함수 버전이 필요합니다. 따라서 첫 번째 배포는 다음 두 단계로 수행해야 합니다.
-
1단계: Lambda 함수를 배포하고
AutoPublishAlias
를 사용하여 자동으로 별칭을 생성합니다. -
2단계:
DeploymentPreference
를 사용하여 점진적 배포를 수행합니다.
첫 번째 점진적 배포를 두 단계로 수행하면 CodeDeploy는 트래픽을 이동할 수 있는 이전 Lambda 함수 버전을 제공합니다.
1단계: Lambda 함수 배포
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live
2단계: 점진적 배포 수행
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before and after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction
자세히 알아보기
점진적 배포를 구성하는 실제 예제는 전체 AWS SAM 워크숍의 모듈 5 - Canary 배포