📘 基本概念: Lambda関数とは?

AWS Lambdaは、サーバーを管理することなくコードを実行できるサービスです。イベント発生時に自動的に実行される関数を作成できます。

基本概念 Lambda関数とはの図 AWS Lambdaは、サーバーを管理することなくコードを実行できるサービスです。3個のコンポーネント(矩形)、矢印や接続線で構成された図。ラベル: イベントソース、Lambda関数、(コード実行)、結果 イベントソース Lambda関数 (コード実行) 結果

🔢 Lambda関数バージョン

Lambdaでは、コードの各デプロイが バージョン として保存されます。一度公開されたバージョンは変更できません。

Lambda関数バージョンの図 Lambdaでは、コードの各デプロイがバージョンとして保存されます。5個のコンポーネント(矩形)、矢印や接続線で構成された図。7個のラベル付き要素を含む。 Lambda関数: hello-world $LATEST (常に最新のコード) バージョン 1 バージョン 2 バージョン 3 時間の流れ

バージョン番号の特徴:

  • 整数の連番(1, 2, 3...)
  • 公開後は不変(変更不可)
  • URNは特定のバージョンを指定: arn:aws:lambda:region:account-id:function:function-name:version
  • $LATEST は常に最新バージョンを示す特殊な識別子

🏷️ Lambda関数エイリアス

エイリアス は特定のLambda関数バージョンを指す「ポインタ」のようなものです。エイリアスは変更可能なため、関数のバージョンを切り替えるときに便利です。

Lambda関数エイリアスの図 エイリアスは特定のLambda関数バージョンを指す「ポインタ」のようなものです。5個のコンポーネント(矩形)、矢印や接続線で構成された図。ラベル: バージョン 1、バージョン 2、バージョン 3、PROD エイリアス、DEV エイリアス バージョン 1 バージョン 2 バージョン 3 PROD エイリアス DEV エイリアス

エイリアスの特徴:

  • 名前付きのポインタ(例: PROD, DEV, STAGING)
  • いつでも別のバージョンを指すように変更可能
  • クライアントは常に同じエイリアスを呼び出せば良い
  • URNにエイリアス名を指定: arn:aws:lambda:region:account-id:function:function-name:alias-name

エイリアスの利点

簡単なロールバック: バージョンに問題があれば、エイリアスを以前のバージョンに戻すだけ
環境分離: PROD、DEV、STAGINGなど環境別に異なるバージョンを使用可能
クライアント側の変更不要: クライアントはエイリアスを参照するため、バージョン変更の影響を受けない
# AWSコンソールでエイリアスを作成する代わりに、AWS CLIを使用する例: aws lambda create-alias \ --function-name hello-world \ --name PROD \ --function-version 2 \ --description "本番環境用エイリアス"

🐤 カナリアリリースとは?

カナリアリリースとは、新バージョンを全ユーザーに一度に提供するのではなく、 一部のトラフィックだけ を新バージョンに流す手法です。問題があれば影響を最小限に抑えられます。

💡 なぜ「カナリア」というのか?

昔、炭鉱では有毒ガスを検知するために「カナリア」という鳥を持ち込んでいました。カナリアが異常を示せば、人間は避難できました。同様に、小さな割合のユーザーで新機能をテストし、問題があれば全体へのリリースを止められます。

80% バージョン2(安定版)
20% バージョン3(新版)

Lambdaでのカナリアリリース実装方法

Lambda関数のエイリアスを使って、トラフィックを2つのバージョンに分割できます:

Lambdaでのカナリアリリース実装方法の図 Lambda関数のエイリアスを使って、トラフィックを2つのバージョンに分割できます:。6個のコンポーネント(矩形)、矢印や接続線で構成された図。11個のラベル付き要素を含む。 ユーザーリクエスト PROD エイリアス トラフィック分割 バージョン 2 (安定版) 80%のトラフィック バージョン 3 (新バージョン) 20%のトラフィック メトリクス監視 メトリクス監視
# AWS CLIでエイリアスにカナリアリリース設定を行う例: aws lambda update-alias \ --function-name hello-world \ --name PROD \ --function-version 2 \ --routing-config AdditionalVersionWeights={"3"=0.2}

この設定では:

  • 80%のトラフィックはバージョン2に送られる
  • 20%のトラフィックはバージョン3に送られる
  • クライアントからは単にPRODエイリアスを呼び出すだけで良い

🚀 カナリアデプロイメントのステップバイステップ

1
現在の安定版(例:バージョン2)を本番環境(PROD)で使用中
2
新しいコードをデプロイし、新バージョン(バージョン3)を作成
3
PRODエイリアスの設定を変更し、トラフィックの一部(例:10%)を新バージョンに割り当て
4
新バージョンのパフォーマンスとエラー率を監視
5
問題がなければ、徐々に新バージョンへのトラフィック割合を増やす(30%→50%→100%)
6
問題が発生した場合、すぐに100%を安定版に戻す(ロールバック)

💻 具体的な実装例

ステップ AWS CLIコマンド 説明
1. 新バージョンの発行 aws lambda publish-version --function-name hello-world $LATESTから新しいバージョン(例:3)を作成
2. カナリア設定の開始 aws lambda update-alias --function-name hello-world --name PROD --function-version 2 --routing-config AdditionalVersionWeights={"3"=0.1} 10%のトラフィックをバージョン3へ
3. カナリア比率の増加 aws lambda update-alias --function-name hello-world --name PROD --function-version 2 --routing-config AdditionalVersionWeights={"3"=0.5} 50%のトラフィックをバージョン3へ
4. 完全移行 aws lambda update-alias --function-name hello-world --name PROD --function-version 3 100%のトラフィックをバージョン3へ
5. 問題時のロールバック aws lambda update-alias --function-name hello-world --name PROD --function-version 2 問題発生時に100%のトラフィックをバージョン2へ戻す

📝 まとめ

Lambda関数のエイリアス

✅ 特定のバージョンを指す名前付きポインタ

✅ 環境別(PROD/DEV/TEST)に異なるバージョンを使用可能

✅ クライアント側の変更なしにバージョン切り替えが可能

カナリアリリース

✅ トラフィックの一部だけを新バージョンに流す手法

✅ リスクを最小限に抑えながら段階的にリリース

✅ エイリアスのルーティング設定で簡単に実装可能

✅ 問題発生時に素早くロールバック可能

初心者向けアドバイス: まずはテスト環境で少量のトラフィック(例:5%)から始め、新バージョンの動作を確認してから徐々に増やしていくことをおすすめします。

Created by SSuzuki1063

AWS SAP Learning Resources