템플릿 생성 AWS SAM - AWS CodeDeploy

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

템플릿 생성 AWS SAM

인프라의 구성 요소를 지정하는 템플릿 파일을 생성합니다 AWS SAM.

AWS SAM 템플릿을 생성하려면
  1. SAM-Tutorial이라는 디렉터리를 생성합니다.

  2. SAM-Tutorial 디렉터리에서 template.yml이라는 파일을 생성합니다.

  3. 다음 YAML 코드를 에 복사합니다template.yml. 이 파일은 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: nodejs18.x # Instructs your myDateTimeFunction is published to an alias named "live". AutoPublishAlias: live # Grants this function permission to call lambda:InvokeFunction Policies: - Version: "2012-10-17" Statement: - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: '*' DeploymentPreference: # Specifies the deployment configuration Type: Linear10PercentEvery1Minute # Specifies Lambda functions for deployment lifecycle hooks Hooks: PreTraffic: !Ref beforeAllowTraffic PostTraffic: !Ref afterAllowTraffic # Specifies the BeforeAllowTraffic lifecycle hook Lambda function beforeAllowTraffic: Type: AWS::Serverless::Function Properties: Handler: beforeAllowTraffic.handler Policies: - Version: "2012-10-17" # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus Statement: - Effect: "Allow" Action: - "codedeploy:PutLifecycleEventHookExecutionStatus" Resource: !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*' - Version: "2012-10-17" # Grants this function permission to call lambda:InvokeFunction Statement: - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: !Ref myDateTimeFunction.Version Runtime: nodejs18.x # Specifies the name of the Lambda hook function FunctionName: 'CodeDeployHook_beforeAllowTraffic' DeploymentPreference: Enabled: false Timeout: 5 Environment: Variables: NewVersion: !Ref myDateTimeFunction.Version # Specifies the AfterAllowTraffic lifecycle hook Lambda function afterAllowTraffic: Type: AWS::Serverless::Function Properties: Handler: afterAllowTraffic.handler Policies: - Version: "2012-10-17" Statement: # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus - Effect: "Allow" Action: - "codedeploy:PutLifecycleEventHookExecutionStatus" Resource: !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*' - Version: "2012-10-17" Statement: # Grants this function permission to call lambda:InvokeFunction - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: !Ref myDateTimeFunction.Version Runtime: nodejs18.x # Specifies the name of the Lambda hook function FunctionName: 'CodeDeployHook_afterAllowTraffic' DeploymentPreference: Enabled: false Timeout: 5 Environment: Variables: NewVersion: !Ref myDateTimeFunction.Version

이 템플릿은 다음을 지정합니다. 자세한 내용은 AWS SAM 템플릿 개념을 참조하세요.

Lambda 함수 myDateTimeFunction

이 Lambda 함수가 게시되면 템플릿의 AutoPublishAlias줄은 이 함수를 live (이)라는 별칭에 연결합니다. 이 자습서의 후반부에서 이 함수에 대한 업데이트는 프로덕션 트래픽을 원래 버전에서 업데이트된 버전으로 점진적으로 전환 AWS CodeDeploy 하여 배포를 트리거합니다.

두 개의 Lambda 배포 확인 함수

수명 CodeDeploy 주기 후크 중에 다음 Lambda 함수가 실행됩니다. 이 함수에는 업데이트된 myDateTimeFunction의 배포를 확인하는 코드가 포함되어 있습니다. 검증 테스트 결과는 해당 PutLifecycleEventHookExecutionStatus API 방법을 CodeDeploy 사용하여 에 전달됩니다. 확인 테스트가 실패하면 배포가 실패하고 롤백됩니다.

  • CodeDeployHook_beforeAllowTrafficBeforeAllowTraffic 후크 중에 실행됩니다.

  • CodeDeployHook_afterAllowTrafficAfterAllowTraffic 후크 중에 실행됩니다.

두 함수의 이름은 모두 CodeDeployHook_로 시작합니다. CodeDeployRoleForLambda 역할은 이름이 이 접두사로 시작하는 Lambda 함수의 Lambda invoke 메서드에 대한 호출만 허용합니다. 자세한 내용은 CodeDeploy API 참조PutLifecycleEventHookExecutionStatusAppSpec AWS Lambda 배포에 대한 '후크' 섹션 및 섹션을 참조하세요.

업데이트된 Lambda 함수의 자동 감지

AutoPublishAlias 기간은 myDateTimeFunction 함수가 언제 변경되는지를 감지한 다음 live 별칭을 사용하여 함수를 배포합니다.

배포 구성

배포 구성은 애플리케이션이 Lambda 함수의 원래 버전에서 새 버전으로 트래픽을 전환하는 속도를 CodeDeploy 결정합니다. 이 템플릿은 미리 정의된 배포 구성인 Linear10PercentEvery1Minute를 지정합니다.

참고

템플릿에서는 사용자 지정 배포 구성을 지정할 수 AWS SAM 없습니다. 자세한 내용은 Create a Deployment Configuration 단원을 참조하십시오.

배포 수명 주기 후크 함수

Hooks 섹션은 수명 주기 이벤트 후크 중에 실행할 함수를 지정합니다. PreTrafficBeforeAllowTraffic 후크 중에 실행되는 함수를 지정합니다. PostTrafficAfterAllowTraffic 후크 중에 실행되는 함수를 지정합니다.

또 다른 Lambda 함수를 호출할 Lambda의 권한

지정된 lambda:InvokeFunction 권한은 애플리케이션에서 Lambda 함수를 호출할 수 있는 권한을 부여하는 데 사용됩니다 AWS SAM. 이 권한은 확인 테스트 중에 CodeDeployHook_beforeAllowTrafficCodeDeployHook_afterAllowTraffic 함수가 배포된 Lambda 함수를 호출할 때 필요합니다.