段階的にサーバーレスアプリケーションをデプロイする - AWS Serverless Application Model

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

段階的にサーバーレスアプリケーションをデプロイする

AWS SAM を使用してサーバーレスアプリケーションを作成する場合は、組み込みのCodeDeploy段階的な Lambda デプロイを提供する。数行の設定だけで、AWS SAM は以下の処理を実行します。

  • Lambda 関数の新しいバージョンをデプロイし、新しいバージョンを参照するエイリアスを自動的に作成する。

  • 期待どおりに動作するか、更新をロールバックするまで、顧客のトラフィックを徐々に新しいバージョンに移行します。

  • 事前トラフィックおよび事後トラフィックのテスト関数を定義して、新しくデプロイしたコードが正しく設定されていること、およびアプリケーションが期待どおりに動作していることを確認します。

  • CloudWatch アラームがトリガーされた場合にデプロイをロールバックする。

注記

AWS SAM テンプレートを使用して段階的なデプロイを有効にすると、CodeDeploy リソースが自動的に作成されます。CodeDeploy リソースは、AWS Management Console から直接表示できます。

以下の例は、CodeDeploy を使用して、新しくデプロイしたバージョンに顧客を段階的に移行するシンプルなバージョンを示しています。

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.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 関数のバージョニングとエイリアス

  • デプロイ設定タイプ: 前の例では、顧客トラフィックの 10% がすぐに新しいバージョンに移行しています。10 分後、すべてのトラフィックが新しいバージョンに移行されます。ただし、あなたのプリフック/ポストフックテストが失敗する、または CloudWatch アラームがトリガーされた場合、CodeDeploy はデプロイをロールバックします。次の表は、先に使用したもののほかにも利用可能なその他のトラフィック移行オプションを示しています。次の点に注意してください。

    • Canary: トラフィックは 2 回の増分で移行されます。あらかじめ定義された Canary オプションから選択できます。このオプションでは、更新された Lambda 関数のバージョンに、最初の増分で移行されるトラフィックの割合 (%) を分単位で指定し、残りのトラフィックが 2 回目の増分で移行されるまでの間隔を分単位で指定します。

    • 線形: トラフィックは毎回同じ間隔 (分) の等しい増分で移行されます。定義済みの Linear オプションから、各増分ごとに移行するトラフィックの割合と、増分の間隔 (分) を選択できます。

    • オール・アット・ワンス: すべてのトラフィックは元の Lambda 関数から最新バージョンの Lambda 関数に一度に移行されます。

    デプロイ設定タイプ

    Canary10Percent30Minutes

    Canary10Percent5Minutes

    Canary10Percent10Minutes

    Canary10Percent15Minutes

    Linear10PercentEvery10Minutes

    Linear10PercentEvery1Minute

    Linear10PercentEvery2Minutes

    Linear10PercentEvery3Minutes

    AllAtOnce

  • アラーム: デプロイで発生したエラーによってトリガーされる CloudWatch アラームです。デプロイは自動的にロールバックされます。その一例は、デプロイする更新されたコードがアプリケーション内にエラーを出している場合です。別の例は、AWS Lambda指定した CloudWatch メトリクスがアラームのしきい値を超えた場合。

  • Hooks: 新しいバージョンへのトラフィックの移行が開始する前に健全性チェックを実行する、事前トラフィックテスト関数と、新しいバージョンへのトラフィックの移行が完了した後に実行する、事後トラフィックテスト関数があります。

    • PreTraffic: トラフィックの移行が開始する前に、CodeDeploy は事前トラフィックフック Lambda 関数を呼び出します。この Lambda 関数は CodeDeploy にコールバックして、成功または失敗を報告します。関数が失敗すると、中止され、失敗が AWS CloudFormation に報告されます。関数が成功すると、CodeDeploy はトラフィックの移行に進みます。

    • PostTraffic: トラフィックの移行が完了した後に、CodeDeploy は事後トラフィックフック Lambda 関数を呼び出します。事前トラフィックフックの場合と同様に、この関数は CodeDeploy にコールバックして、成功または失敗を報告します。事後トラフィックフックを使用して、統合テストやその他の検証アクションを実行します。

    詳細については、「安全なデプロイのための SAM レファレンス」を参照してください。