テンプレートを作成する 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 template concepts (テンプレートの概念) を参照してください。

myDateTimeFunction と呼ばれるLambda 関数

この Lambda 関数が発行されると、テンプレート中の AutoPublishAlias の行は、それを live という名前のエイリアスにリンクします。このチュートリアルの後半で、この関数の更新により、 によるデプロイ AWS CodeDeploy がトリガーされ、これにより、本番トラフィックが元のバージョンから更新されたバージョンに段階的にシフトされます。

2 つの Lambda デプロイ検証関数

次の Lambda 関数は、 CodeDeploy ライフサイクルフック中に実行されます。関数には、更新された myDateTimeFunction のデプロイを検証するコードが含まれています。検証テストの結果は、 PutLifecycleEventHookExecutionStatusAPIメソッド 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 関数を呼び出す場合に必要です。