翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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のメソッドへの呼び出しを許可します。詳細については、AWS の Lambda デプロイ向けの AppSpec の「hooks」セクション および CodeDeploy API Reference 中の PutLifecycleEventHookExecutionStatus を参照してください。 -
- 更新された Lambda 関数の自動検出
-
AutoPublishAlias条件は、myDateTimeFunction関数が変更されたときに検出し、liveエイリアスを使用してデプロイするようにフレームワークに指示します。 - デプロイ設定
-
デプロイ設定により、CodeDeploy アプリケーションが Lambda 関数の元のバージョンから新しいバージョンにトラフィックを移行するレートが決まります。このテンプレートは、事前定義されたデプロイ設定
Linear10PercentEvery1Minuteを指定します。注記
AWS SAM テンプレートでカスタムデプロイ設定を指定することはできません。詳細については、「Create a Deployment Configuration」を参照してください。
- デプロイライフサイクルフック関数
-
Hooksセクションでは、ライフサイクルイベントフック中に実行する関数を指定します。PreTrafficは、PostTrafficフック中に実行する関数を指定します。BeforeAllowTrafficは、フック中にAfterAllowTrafficが実行する関数を指定します。 - Lambda が別の Lambda 関数を呼び出すための許可
-
指定された
lambda:InvokeFunctionアクセス許可は、SAM AWS アプリケーションで使用されるロールに Lambda 関数を呼び出すアクセス許可を付与します。これは、CodeDeployHook_beforeAllowTrafficおよびCodeDeployHook_afterAllowTrafficの関数が、検証テスト中に、デプロイされた Lambda 関数を呼び出す場合に必要です。