加重エイリアスを使用して Lambda カナリアデプロイの実装
加重エイリアスを使用し、同じ関数の 2 つの異なるバージョン間でトラフィックを分割できます。この方法では、トラフィックの割合が小さい関数の新しいバージョンをテストし、必要に応じてすばやくロールバックできます。これはカナリアデプロイと呼ばれます。カナリアデプロイは、すべてのトラフィックを一度に切り替えるのではなく、新しいバージョンをリクエストの一部にのみ公開するため、ブルー/グリーンデプロイとは異なります。
エイリアスは最大 2 つの Lambda 関数バージョンを指すことができます。バージョンは次の基準を満たす必要があります。
注記
Lambda は、単純な確率モデルを使用して 2 つの関数バージョン間でトラフィックを分散します。低いトラフィックレベルでは、各バージョンで設定されたトラフィックの割合と実際の割合の間に大きな差異が生じる場合があります。関数がプロビジョニングされた同時実行を使用する場合、エイリアスルーティングがアクティブである間に、プロビジョニングされた同時実行インスタンスの数を高く設定することで、過剰呼び出しを防ぐことができます。
加重エイリアスの作成
呼び出されたバージョンの特定
2 つの関数バージョン間でトラフィックの重みを設定している場合、どちらの Lambda 関数バージョンが呼び出されたかを特定するための 2 つの方法があります。
-
CloudWatch ログ – Lambda は、すべての関数呼び出しの呼び出されたバージョン ID を含む
START
ログエントリを自動的に発信します。例:START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version:
2
エイリアスの呼び出しでは、Lambda は
ExecutedVersion
ディメンションを使用して、呼び出されたバージョンでメトリクスデータをフィルタリングします。詳細については、「Lambda 関数のメトリクスの表示」を参照してください。 -
応答のペイロード (同期呼び出し) – 同期関数呼び出しの応答には、呼び出された関数バージョンを示す
x-amz-executed-version
ヘッダーが含まれます。
加重エイリアスを使用してローリングデプロイを作成する
AWS CodeDeploy および AWS Serverless Application Model (AWS SAM) を使用してローリングデプロイを作成します。これにより、関数コードの変更を自動的に検出し、関数の新しいバージョンをデプロイし、新しいバージョンに流れるトラフィック量を徐々に増やします。トラフィックの量と増加率は、設定可能なパラメータです。
ローリングデプロイでは、AWS SAM は次のタスクを実行します。
-
Lambda 関数を設定してエイリアスを作成します。加重エイリアスのルーティング設定は、ローリングデプロイを実装する基本的な機能です。
-
CodeDeploy アプリケーションおよびデプロイグループを作成します。必要に応じて、デプロイグループはローリングデプロイおよびロールバックを管理します。
-
Lambda 関数の新しいバージョンを作成したときに検出します。
-
CodeDeploy をトリガーして新しいバージョンのデプロイを開始します。
AWS SAM テンプレートの例
次の例では、単純なローリングデプロイの 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 # Creates an alias named "live" for the function, and automatically publishes when you update the function. AutoPublishAlias: live DeploymentPreference: # Specifies the deployment configuration Type: Linear10PercentEvery2Minutes
このテンプレートは、次のプロパティを持つ myDateTimeFunction
という名前の Lambda 関数を定義します。
- AutoPublishAlias
-
AutoPublishAlias
プロパティは、live
という名前のエイリアスを作成します。さらに、関数の新しいコードを保存するときに、AWS SAM フレームワークが自動的に検出します。その後、フレームワークは新しい関数バージョンを公開して、新しいバージョンを指すようにlive
エイリアスを更新します。 - DeploymentPreference
-
DeploymentPreference
プロパティにより、CodeDeploy アプリケーションが Lambda 関数の元のバージョンから新しいバージョンにトラフィックを移行するレートが決まります。この値Linear10PercentEvery2Minutes
により、トラフィックの追加 10% が 2 分ごとに新しいバージョンにシフトされます。事前設定されたデプロイ設定の一覧については、「デプロイ設定」を参照してください。
CodeDeploy および AWS SAM でローリングデプロイを作成する方法の詳細については、次を参照してください。