를 사용하여 서버리스 애플리케이션 점진적으로 배포 AWS SAM - AWS Serverless Application Model

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

를 사용하여 서버리스 애플리케이션 점진적으로 배포 AWS SAM

AWS Serverless Application Model (AWS SAM)는 점진적 AWS Lambda 배포를 제공하기 CodeDeploy 위해 와 함께 기본 제공됩니다. 몇 줄의 구성만으로 AWS SAM 는 다음을 수행합니다.

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

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

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

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

참고

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

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

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: 트래픽 이동이 시작되기 전에 는 트래픽 이전 후크 Lambda 함수를 CodeDeploy 호출합니다. 이 Lambda 함수는 를 다시 호출 CodeDeploy 하여 성공 또는 실패를 나타내야 합니다. 함수가 실패하면 중단되고 실패가 다시 에 보고됩니다 AWS CloudFormation. 함수가 성공하면 는 트래픽 이동으로 CodeDeploy 진행합니다.

    • PostTraffic: 트래픽 이동이 완료되면 트래픽 후 후크 Lambda 함수를 CodeDeploy 호출합니다. 이는 함수가 성공 또는 실패를 보고 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 배포를 잠조하세요.