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 배포 확인 함수
-
다음 Lambda 함수는 CodeDeploy 수명 주기 후크 중에 실행됩니다. 이 함수에는 업데이트된
myDateTimeFunction의 배포를 확인하는 코드가 포함되어 있습니다. 확인 테스트의 결과는PutLifecycleEventHookExecutionStatusAPI 메서드를 사용하여 CodeDeploy에 전달됩니다. 확인 테스트가 실패하면 배포가 실패하고 롤백됩니다.-
CodeDeployHook_beforeAllowTraffic은BeforeAllowTraffic후크 중에 실행됩니다. -
CodeDeployHook_afterAllowTraffic은AfterAllowTraffic후크 중에 실행됩니다.
두 함수의 이름은 모두
CodeDeployHook_로 시작합니다.CodeDeployRoleForLambda역할은 이름이 이 접두사로 시작하는 Lambda 함수의 Lambdainvoke메서드에 대한 호출만 허용합니다. 자세한 내용은 AWS Lambda 배포를 위한 AppSpec 'hooks' 섹션와(과) CodeDeploy API 참조의 PutLifecycleEventHookExecutionStatus를 참조하세요. -
- 업데이트된 Lambda 함수의 자동 감지
-
AutoPublishAlias기간은myDateTimeFunction함수가 언제 변경되는지를 감지한 다음live별칭을 사용하여 함수를 배포합니다. - 배포 구성
-
배포 구성에 따라 CodeDeploy 애플리케이션이 Lambda 함수의 원래 버전에서 새 버전으로 트래픽을 이동하는 속도가 결정됩니다. 이 템플릿은 미리 정의된 배포 구성인
Linear10PercentEvery1Minute를 지정합니다.참고
AWS SAM 템플릿에서는 사용자 지정 배포 구성을 지정할 수 없습니다. 자세한 내용은 Create a Deployment Configuration 섹션을 참조하세요.
- 배포 수명 주기 후크 함수
-
Hooks섹션은 수명 주기 이벤트 후크 중에 실행할 함수를 지정합니다.PreTraffic은BeforeAllowTraffic후크 중에 실행되는 함수를 지정합니다.PostTraffic는AfterAllowTraffic후크 중에 실행되는 함수를 지정합니다. - 또 다른 Lambda 함수를 호출할 Lambda의 권한
-
지정된
lambda:InvokeFunction권한은 AWS SAM 애플리메이션에서 사용되는 역할에게 Lambda 함수를 호출할 수 있는 권한을 부여합니다. 이 권한은 확인 테스트 중에CodeDeployHook_beforeAllowTraffic및CodeDeployHook_afterAllowTraffic함수가 배포된 Lambda 함수를 호출할 때 필요합니다.