기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
템플릿 생성 AWS SAM
인프라의 구성 요소를 지정하는 템플릿 파일을 생성합니다 AWS SAM.
AWS SAM 템플릿을 생성하려면
-
SAM-Tutorial
이라는 디렉터리를 생성합니다. -
SAM-Tutorial
디렉터리에서template.yml
이라는 파일을 생성합니다. -
다음 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_beforeAllowTraffic
은BeforeAllowTraffic
후크 중에 실행됩니다. -
CodeDeployHook_afterAllowTraffic
은AfterAllowTraffic
후크 중에 실행됩니다.
두 함수의 이름은 모두
CodeDeployHook_
로 시작합니다.CodeDeployRoleForLambda
역할은 이름이 이 접두사로 시작하는 Lambda 함수의 Lambdainvoke
메서드에 대한 호출만 허용합니다. 자세한 내용은 CodeDeploy API 참조PutLifecycleEventHookExecutionStatus의 AppSpec AWS Lambda 배포에 대한 '후크' 섹션 및 섹션을 참조하세요. -
- 업데이트된 Lambda 함수의 자동 감지
-
AutoPublishAlias
기간은myDateTimeFunction
함수가 언제 변경되는지를 감지한 다음live
별칭을 사용하여 함수를 배포합니다. - 배포 구성
-
배포 구성은 애플리케이션이 Lambda 함수의 원래 버전에서 새 버전으로 트래픽을 전환하는 속도를 CodeDeploy 결정합니다. 이 템플릿은 미리 정의된 배포 구성인
Linear10PercentEvery1Minute
를 지정합니다.참고
템플릿에서는 사용자 지정 배포 구성을 지정할 수 AWS SAM 없습니다. 자세한 내용은 Create a Deployment Configuration 단원을 참조하십시오.
- 배포 수명 주기 후크 함수
-
Hooks
섹션은 수명 주기 이벤트 후크 중에 실행할 함수를 지정합니다.PreTraffic
은BeforeAllowTraffic
후크 중에 실행되는 함수를 지정합니다.PostTraffic
는AfterAllowTraffic
후크 중에 실행되는 함수를 지정합니다. - 또 다른 Lambda 함수를 호출할 Lambda의 권한
-
지정된
lambda:InvokeFunction
권한은 애플리케이션에서 Lambda 함수를 호출할 수 있는 권한을 부여하는 데 사용됩니다 AWS SAM. 이 권한은 확인 테스트 중에CodeDeployHook_beforeAllowTraffic
및CodeDeployHook_afterAllowTraffic
함수가 배포된 Lambda 함수를 호출할 때 필요합니다.