はじめに
AWS Lambdaではバージョンごとにエイリアスを設定することができます。本記事では、エイリアスを使用して、同じLambda関数の異なるバージョン間でトラフィックを加重ルーティングする方法を実装していきます。
ゴール
Lambdaのバージョニングとエイリアスを利用した加重ルーティングの実施
加重ルーティングとは?
トラフィックを指定した割合で分割する事
作るもの
- Lambda
- Python 3.12
- API Gateway
Lambdaの作成
Lambdaのバージョンを2つ(バージョン1, 2)作成していきます。
- バージョン1の作成
Lambdaのバージョン1が実行された事が分かるよう内容にしてデプロイします。
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'これは Lambda バージョン 1 です。'
}
デプロイ後にバージョンを作成します。
バージョンタブに移動し、新しいバージョンを発行
をクリック。
- エイリアスの設定
バージョンのエイリアスを作成します。
エイリアスタブに移動し、エイリアスを発行
をクリック。
エイリアスの名前とバージョンを選択して保存をクリック。
- バージョン2の作成
バージョン1の作成と同様に2を作成します。
作成出来たらデプロイ後に新しいバージョンを発行します。
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'これは Lambda バージョン 2 です。'
}
加重ルーティングの設定
エイリアスタブから test
エイリアスを選択します。
全体の20%のトラフィックはバージョン2に行くように振り分けます。
API Gatewayとの連携
以下の設定でAPI GatewayとLambdaを連携します。
- 統合タイプ:Lambda(エイリアスをつけたバージョンのLambdaを選択)
- メソッド:Get
リクエストを送ってみる
Postmanから10回ほどリクエストを送って試してみます。
確率的には10回中8件はバージョン1、2件はバージョン2で処理されます。
実行結果
10回中7回はバージョン1、3回はバージョン2で処理されました。想定結果から大きく外れず、それぞれのLambdaバージョンが動いてることを確認できました。
7回
{
"statusCode": 200,
"body": "これは Lambda バージョン 1 です。"
}
3回
{
"statusCode": 200,
"body": "これは Lambda バージョン 2 です。"
}