본문 바로가기
CLOUD/AWS

Canary 배포 - Sam 탬플릿 업데이트 및 Canary 모니터링

by Rainbound-IT 2021. 8. 24.
반응형

프로젝트에서 SAM 템플릿(sam-app/template.yaml)을 열고 HelloWorldFunction 속성 섹션에 다음 줄을 추가합니다.

 

AutoPublishAlias: live
DeploymentPreference:
    Type: Canary10Percent5Minutes

 

배포 기본 설정 유형

이 워크샵에서는 Canary10Percent5Minutes 전략을 사용합니다. 즉, 트래픽이 2단계로 이동됩니다. 첫 번째 증분에서는 트래픽의 10%만 새 Lambda 버전으로 이동되고 5분 후에 나머지 90%가 이동됩니다. CodeDeploy에서 선택할 수 있는 다른 배포 전략이 있습니다.

 

Canary10Percent30Minutes
Canary10Percent5Minutes
Canary10Percent10Minutes
Canary10Percent15Minutes
Linear10PercentEvery10Minutes
Linear10PercentEvery1Minute
Linear10PercentEvery2Minutes
Linear10PercentEvery3Minutes
AllAtOnce

 

Linear 전략은 트래픽이 각 증분(increment) 사이에 동일한 수의 시간 간격으로 동일한 증분으로 이동됨을 의미합니다.

 

 

SAM 템플릿 유효성 검사

터미널에서 다음 명령을 실행합니다.

sam validate

그리고 해당사항 반영을 위해 push 합니다.

 

git add .
git commit -m "Canary deployments with SAM"
git push

 

Canary 상태 모니터링

배포 중에 코드를 모니터링하는 경우 Canary 배포가 훨씬 더 성공적일수 있습니다. 지정된 CloudWatch 지표가 경보 임계값을 위반한 경우 배포를 자동으로 롤백하도록 CodeDeploy를 구성할 수 있습니다. 모니터링할 일반적인 지표는 예를 들어 Lambda 호출 오류 또는 호출 기간(지연 시간)입니다.

 

HelloWorldFunction 정의 다음에 리소스 섹션의 template.yaml 파일에 다음 알람 정의를 추가합니다.

 

CanaryErrorsAlarm:
  Type: AWS::CloudWatch::Alarm
  Properties:
    AlarmDescription: Lambda function canary errors
    ComparisonOperator: GreaterThanThreshold
    EvaluationPeriods: 2
    MetricName: Errors
    Namespace: AWS/Lambda
    Period: 60
    Statistic: Sum
    Threshold: 0
    Dimensions:
      - Name: Resource
        Value: !Sub "${HelloWorldFunction}:live"
      - Name: FunctionName
        Value: !Ref HelloWorldFunction
      - Name: ExecutedVersion
        Value: !GetAtt HelloWorldFunction.Version.Version

그런 다음 HelloWorldFunction 정의의 DeploymentPreference 섹션에 다음 줄을 추가합니다.

Alarms:
    - !Ref CanaryErrorsAlarm

이런식으로 입력하면 됩니다.

 

하고 나서 타당성 검사해봅니다.
변경사항을 push 합니다.

 

그럼 잘되는지 확인해 봅니다.

 

 

 

콘솔 CodeDeploy에서 해당 과정을 상세하기 볼수 있습니다.

Canary10Percent5Minutes 를 선택하였기 때문에 여기서 5분정도 기다려야합니다.

 

기다리면 100% 완료된것을 볼 수 있습니다.

반응형

'CLOUD > AWS' 카테고리의 다른 글

AWS Lambda 란? (기능, 장점, 단점)  (0) 2021.08.30
Canary 배포 - Rollbacks  (0) 2021.08.24
Canary 배포 개요(SAM)  (0) 2021.08.24
AWS codecommit 리포지토리 연결 및 에러  (0) 2021.08.24
Pipeline 만들기(SAM)  (0) 2021.08.23

댓글