建立您的 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 部署驗證功能

下列 Lambda 函數會在 CodeDeploy 生命週期掛接期間執行。函數中的程式碼會驗證已更新的 myDateTimeFunction 是否部署完成。驗證測試的結果會傳遞給 CodeDeploy 使用其 PutLifecycleEventHookExecutionStatus API 方法。如果驗證測試失敗,部署會失敗並轉返。

  • CodeDeployHook_beforeAllowTraffic 會在 BeforeAllowTraffic 勾點期間執行。

  • CodeDeployHook_afterAllowTraffic 會在 AfterAllowTraffic 勾點期間執行。

兩個函數的名稱以 CodeDeployHook_ 開頭。此CodeDeployRoleForLambda角色只允許在名稱以此前置詞開頭的 Lambda 函數中呼叫 Lambda invoke 方法。如需詳細資訊,請參閱 CodeDeploy API 參考PutLifecycleEventHookExecutionStatus中的AppSpec AWS Lambda 部署的「掛鉤」部分和。

自動偵測更新的 Lambda 函數

AutoPublishAlias 一詞告知框架偵測 myDateTimeFunction 函數何時變更,然後使用 live 別名部署此函數。

部署組態

部署組態會決定 CodeDeploy應用程式將流量從原始版本的 Lambda 函數轉移到新版本的速率。此範本指定預先定義的部署組態 Linear10PercentEvery1Minute

注意

您無法在 AWS SAM 範本中指定自訂部署組態。如需詳細資訊,請參閱 Create a Deployment Configuration

部署生命週期勾點函數

Hooks 區段指定在生命週期事件勾點期間執行的函數。PreTraffic 指定在 BeforeAllowTraffic 勾點期間執行的函數。PostTraffic 指定在 AfterAllowTraffic 勾點期間執行的函數。

讓 Lambda 叫用另一個 Lambda 函數的許可

指定的lambda:InvokeFunction權限會授與 S AWS AM 應用程式所使用的角色叫用 Lambda 函數的權限。當CodeDeployHook_beforeAllowTrafficCodeDeployHook_afterAllowTraffic函數在驗證測試期間叫用部署的 Lambda 函數時,這是必需的。