翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
でサーバーレスアプリケーションを段階的にデプロイする AWS SAM
AWS Serverless Application Model (AWS SAM) には が組み込まれCodeDeployており、段階的な AWS Lambda デプロイが可能です。ほんの数行の設定で、 AWS SAM は以下を行います。
-
Lambda 関数の新しいバージョンをデプロイし、新しいバージョンをポイントするエイリアスを自動的に作成する。
-
新しいバージョンが期待どおりに動作していることを確認するまで、カスタマートラフィックを新しいバージョンに段階的に移行する。更新が正しく動作しない場合は、変更をロールバックできます。
-
トラフィック前およびトラフィック後のテスト関数を定義して、新しくデプロイされたコードが正しく設定されており、アプリケーションが期待どおりに動作していることを確認する。
-
CloudWatch アラームがトリガーされると、デプロイを自動的にロールバックします。
注記
AWS SAM テンプレートを使用して段階的なデプロイを有効にすると、 CodeDeploy リソースが自動的に作成されます。 CodeDeploy リソースは、 から直接表示できます AWS Management Console。
例
次の例は、 CodeDeploy を使用して、お客様を新しくデプロイされたバージョンの Lambda 関数に徐々に移行させる方法を示しています。
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before & after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction
AWS SAM テンプレートに対するこれらのリビジョンは、次の操作を行います。
-
AutoPublishAlias
: このプロパティを追加し、エイリアス名を指定すると、次のようになります AWS SAM。-
Lambda 関数の Amazon S3 への変更に基づいて、新しいコードがデプロイされるタイミングを検出しますURI。
-
最新のコードでその関数の更新バージョンを作成し、発行する。
-
ユーザーが提供する名前でエイリアスを作成し (エイリアスが既に存在する場合を除く)、Lambda 関数の更新バージョンをポイントする。これを活用するには、関数の呼び出しがエイリアス修飾子を使用する必要があります。Lambda 関数のバージョニングとエイリアスになじみがない場合は、AWS Lambda 関数のバージョニングとエイリアスについて参照してください。
-
-
Deployment Preference Type
: 上記の例では、カスタマートラフィックの 10% が直ちに新しいバージョンに移行され、10 分後にすべてのトラフィックが新しいバージョンに移行されます。ただし、トラフィック前またはトラフィック後のテストが失敗した場合、または CloudWatch アラームがトリガーされた場合、 はデプロイを CodeDeploy ロールバックします。次の方法で、バージョン間のトラフィックの移行方法を指定できます。-
Canary
: トラフィックは 2 回の増分で移行されます。事前定義された Canary オプションから選択できます。このオプションは、最初の増分で更新された Lambda 関数バージョンに移行されるトラフィックの割合と、2 番目の増分で残りのトラフィックが移行されるまでの間隔を分単位で指定します。 -
Linear
: トラフィックは、毎回同じ間隔(分)の等しい増分で移行します。増分ごとに移行されるトラフィックの割合と、増分間の間隔 (分) を指定する事前定義された Linear オプションから選択できます。 -
AllAtOnce
: すべてのトラフィックは元の Lambda 関数から最新バージョンの Lambda 関数に一度に移行されます。
以下の表は、この例で使用したもの以外で利用可能なその他のトラフィック移行オプションの概要です。
デプロイプリファレンスのタイプ Canary10Percent30Minutes
Canary10Percent5Minutes
Canary10Percent10Minutes
Canary10Percent15Minutes
Linear10PercentEvery10Minutes
Linear10PercentEvery1Minute
Linear10PercentEvery2Minutes
Linear10PercentEvery3Minutes
AllAtOnce
-
-
Alarms
: これらは、デプロイによって発生したエラーによってトリガーされる CloudWatch アラームです。エラーが発生すると、デプロイは自動的にロールバックされます。例えば、デプロイしている更新されたコードがアプリケーション内にエラーを生じさせている場合です。もう 1 つの例は、指定した AWS Lambdaまたはカスタム CloudWatch メトリクスがアラームしきい値を超えた場合です。 -
Hooks
: トラフィックが新しいバージョンに移行を開始する前、および移行が完了した後でチェックを実行する、トラフィック前とトラフィック後のテスト関数です。-
PreTraffic
: トラフィックシフトを開始する前に、 はトラフィック前フック Lambda CodeDeploy 関数を呼び出します。この Lambda 関数は CodeDeploy を呼び出し、成功または失敗を示す必要があります。関数が失敗した場合、関数は中止し、失敗を に報告します AWS CloudFormation。関数が成功すると、 CodeDeploy はトラフィックシフトに進みます。 -
PostTraffic
: トラフィックシフトが完了すると、 はトラフィック後フック Lambda CodeDeploy 関数を呼び出します。これは、トラフィック前フックに似ています。このフックでは、関数が を呼び出し CodeDeploy て成功または失敗を報告しなければなりません。post-traffic hook を使用して、統合テストやその他の検証アクションを実行します。
詳細については、SAM「安全なデプロイのリファレンス
」を参照してください。 -
初めて Lambda 関数を段階的にデプロイする
Lambda 関数を徐々にデプロイする場合、トラフィックを移行するには、以前にデプロイされた関数バージョン CodeDeploy が必要です。したがって、最初のデプロイは次の 2 つのステップで実行する必要があります。
-
ステップ 1: Lambda 関数をデプロイし、
AutoPublishAlias
を使用してエイリアスを自動的に作成します。 -
ステップ 2:
DeploymentPreference
を使用して段階的にデプロイします。
最初の段階的デプロイを 2 つのステップで実行する CodeDeploy と、トラフィックを移行するための以前の Lambda 関数バージョンが提供されます。
ステップ 1: Lambda 関数をデプロイする
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live
ステップ 2: 段階的にデプロイする
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before and after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction
詳細
段階的なデプロイを設定する実践的な例については、「包括的な AWS SAM ワークショップ」の「モジュール 5 - canary デプロイ