加重エイリアスを使用して Lambda カナリアデプロイの実装 - AWS Lambda

加重エイリアスを使用して Lambda カナリアデプロイの実装

加重エイリアスを使用し、同じ関数の 2 つの異なるバージョン間でトラフィックを分割できます。この方法では、トラフィックの割合が小さい関数の新しいバージョンをテストし、必要に応じてすばやくロールバックできます。これはカナリアデプロイと呼ばれます。カナリアデプロイは、すべてのトラフィックを一度に切り替えるのではなく、新しいバージョンをリクエストの一部にのみ公開するため、ブルー/グリーンデプロイとは異なります。

エイリアスは最大 2 つの Lambda 関数バージョンを指すことができます。バージョンは次の基準を満たす必要があります。

  • 両方のバージョンに同じ実行ロールが必要です。

  • どちらのバージョンも、同じ配信不能キュー設定を持つか、配信不能キュー設定がない必要があります。

  • 両方のバージョンを公開する必要があります。エイリアスが $LATEST を指すことはできません。

注記

Lambda は、単純な確率モデルを使用して 2 つの関数バージョン間でトラフィックを分散します。低いトラフィックレベルでは、各バージョンで設定されたトラフィックの割合と実際の割合の間に大きな差異が生じる場合があります。関数がプロビジョニングされた同時実行を使用する場合、エイリアスルーティングがアクティブである間に、プロビジョニングされた同時実行インスタンスの数を高く設定することで、過剰呼び出しを防ぐことができます。

加重エイリアスの作成

Console
コンソールを使用してエイリアスのルーティングを設定するには
注記

関数に少なくとも 2 つの公開バージョンがあることを確認します。追加のバージョンを作成するには、「関数バージョンの作成」の手順に従います。

  1. Lambda コンソールの [関数ページ] を開きます。

  2. 関数を選択します。

  3. [エイリアス]、[ エイリアスの作成 ] の順にクリックします。

  4. [Create alias (エイリアスの作成)] ページで、以下の操作を行います。

    1. [Name (名前)] で、エイリアスの名前を入力します。

    2. (オプション) [Description (説明)] で、エイリアスの説明を入力します。

    3. [Version (バージョン)] で、エイリアスが参照する最初の関数のバージョンを選択します。

    4. [Weighted alias (加重エイリアス)] を展開します。

    5. [Additional version (追加のバージョン)] で、エイリアスが参照する 2 番目の関数のバージョンを選択します。

    6. [Weight (%) (重み (%))] で、関数の重み値を入力します。重みとは、エイリアスが呼び出されたときにそのバージョンに割り当てられるトラフィックの割合 (%) です。最初のバージョンは残余重みを受け取ります。たとえば、[Additional version] に 10 パーセントを指定した場合、最初のバージョンには自動的に 90 パーセントが割り当てられます。

    7. [Save] を選択します。

AWS CLI

create-alias および update-alias AWS CLI コマンドを使用して、2 つの関数バージョン間のトラフィックの重みを設定します。エイリアスを作成または更新するときは、routing-config パラメータでトラフィックの重みを指定します。

以下の例では、関数のバージョン 1 を参照する routing-alias という名前の Lambda 関数のエイリアスを作成します。関数のバージョン 2 は、トラフィックの 3% を受信します。残りの 97% のトラフィックはバージョン 1 にルーティングされます。

aws lambda create-alias \ --name routing-alias \ --function-name my-function \ --function-version 1 \ --routing-config AdditionalVersionWeights={"2"=0.03}

バージョン 2 への着信トラフィックのパーセンテージを増やすには、update-alias コマンドを使用します。次の例では、トラフィックを 5% に増やします。

aws lambda update-alias \ --name routing-alias \ --function-name my-function \ --routing-config AdditionalVersionWeights={"2"=0.05}

すべてのトラフィックをバージョン 2 にルーティングするには、update-alias コマンドを使用して、エイリアスがバージョン 2 を参照するように function-version プロパティを変更します。このコマンドでは、ルーティング設定もリセットされます。

aws lambda update-alias \ --name routing-alias \ --function-name my-function \ --function-version 2 \ --routing-config AdditionalVersionWeights={}

前のステップの AWS CLI コマンドは、以下の Lambda API オペレーションに対応しています。

呼び出されたバージョンの特定

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 でローリングデプロイを作成する方法の詳細については、次を参照してください。