翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
テンプレートを作成する 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 template concepts (テンプレートの概念) を参照してください。
myDateTimeFunction
と呼ばれるLambda 関数-
この Lambda 関数が発行されると、テンプレート中の
AutoPublishAlias
の行は、それをlive
という名前のエイリアスにリンクします。このチュートリアルの後半で、この関数の更新により、 によるデプロイ AWS CodeDeploy がトリガーされ、これにより、本番トラフィックが元のバージョンから更新されたバージョンに段階的にシフトされます。 - 2 つの Lambda デプロイ検証関数
-
次の Lambda 関数は、 CodeDeploy ライフサイクルフック中に実行されます。関数には、更新された
myDateTimeFunction
のデプロイを検証するコードが含まれています。検証テストの結果は、PutLifecycleEventHookExecutionStatus
APIメソッド CodeDeploy を使用して に渡されます。検証テストが失敗すると、デプロイは失敗し、ロールバックされます。-
CodeDeployHook_beforeAllowTraffic
は、BeforeAllowTraffic
フック中に実行します。 -
CodeDeployHook_afterAllowTraffic
は、AfterAllowTraffic
フック中に実行します。
両方の関数の名前は
CodeDeployHook_
で始まります。CodeDeployRoleForLambda
のロールは、このプレフィックスで始まる名前の Lambda 関数でのみ、Lambda のinvoke
のメソッドへの呼び出しを許可します。詳細については、 リファレンス のAppSpec AWS Lambda デプロイの「フック」セクション「」およびPutLifecycleEventHookExecutionStatus「」を参照してください。 CodeDeploy API -
- 更新された Lambda 関数の自動検出
-
AutoPublishAlias
条件は、myDateTimeFunction
関数が変更されたときに検出し、live
エイリアスを使用してデプロイするようにフレームワークに指示します。 - デプロイ設定
-
デプロイ設定により、アプリケーションが CodeDeployトラフィックを元のバージョンの Lambda 関数から新しいバージョンに移行する速度が決まります。このテンプレートは、事前定義されたデプロイ設定
Linear10PercentEvery1Minute
を指定します。注記
テンプレートで AWS SAMカスタムデプロイ設定を指定することはできません。詳細については、「Create a Deployment Configuration」を参照してください。
- デプロイライフサイクルフック関数
-
Hooks
セクションでは、ライフサイクルイベントフック中に実行する関数を指定します。PreTraffic
は、PostTraffic
フック中に実行する関数を指定します。BeforeAllowTraffic
は、フック中にAfterAllowTraffic
が実行する関数を指定します。 - Lambda が別の Lambda 関数を呼び出すための許可
-
指定された
lambda:InvokeFunction
アクセス許可は、Lambda 関数を呼び出すためのアクセス許可を AWS SAMアプリケーションが使用するロールに付与します。これは、CodeDeployHook_beforeAllowTraffic
およびCodeDeployHook_afterAllowTraffic
の関数が、検証テスト中に、デプロイされた Lambda 関数を呼び出す場合に必要です。