서버리스 애플리케이션의 점진적 배포 - AWS Serverless Application Model

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

서버리스 애플리케이션의 점진적 배포

AWS Serverless Application Model(AWS SAM) 는 함께 기본 제공되므로 점진적으로 CodeDeployAWS Lambda배포할 수 있습니다. 몇 줄의 구성만으로 AWS SAM은 귀하를 위해 다음을 수행합니다.

  • Lambda 함수의 새 버전을 배포하고 새 버전을 가리키는 별칭을 자동으로 생성합니다.

  • 예상대로 작동한다고 확신할 때까지 고객 트래픽을 새 버전으로 점진적으로 이동시킵니다. 업데이트가 제대로 작동하지 않는 경우 변경 내용을 롤백할 수 있습니다.

  • 새로 배포된 코드가 올바르게 구성되었고 애플리케이션이 예상대로 작동하는지 확인하는 사전 트래픽 및 사후 트래픽 테스트 함수를 정의합니다.

  • 경보가 트리거되면 CloudWatch 배포를 자동으로 롤백합니다.

참고

AWS SAM템플릿을 통해 점진적 배포를 활성화하면 CodeDeploy 리소스가 자동으로 생성됩니다. 를 통해 CodeDeploy 리소스를 직접 볼 수 있습니다. AWS Management Console

다음 예제는 를 사용하여 고객을 새로 배포된 Lambda 함수 버전으로 점진적으로 CodeDeploy 전환하는 방법을 보여줍니다.

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.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

    선형 10 10분 PercentEvery

    리니어 PercentEvery 10 1분

    리니어 PercentEvery 10 2분

    리니어 PercentEvery 10 3분

    AllAtOnce

  • Alarms: 배포로 인해 발생한 오류로 인해 트리거되는 CloudWatch 경보입니다. 이들은 발생하면 귀하의 배포를 자동으로 롤백합니다. 예를 들어, 배포하려는 업데이트된 코드로 인해 애플리케이션 내에서 오류가 발생하는 경우입니다. 또 다른 예는 지정한 CloudWatch 지표 AWS Lambda또는 사용자 지정 지표가 경보 임계값을 위반한 경우입니다.

  • Hooks: 이들은 새 버전으로 트래픽 이동이 시작되기 전과 트래픽 이동이 완료된 후에 검사를 실행하는 사전 트래픽 및 사후 트래픽 테스트 함수입니다.

    • PreTraffic: 트래픽 이동이 시작되기 전에 사전 트래픽 후크 Lambda CodeDeploy 함수를 호출합니다. 이 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: nodejs12.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live

2단계: 점진적 배포 수행

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.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 배포를 잠조하세요.