はじめに
re:Invent の AWS Jam にて、 LaunchDarkly を使う課題がありました。 復習を兼ねて、 AWS Lambda と LaunchDarkly を連携させて、機能フラグの基本的な使い方を体験します。
LaunchDarkly は、機能フラグ(Feature Flag)を管理するための SaaS プラットフォームです。コードをデプロイし直すことなく、ダッシュボードから機能の ON/OFF をリアルタイムに切り替えられます。
LaunchDarkly の準備
アカウント作成
LaunchDarkly 公式サイト からアカウントを作成します。無料トライアルすることができます。
フラグの作成
LaunchDarkly のダッシュボードからフラグを作成します。
- 左メニューから「Feature flags」を選択
- 「Create flag」をクリック
- 以下の設定でフラグを作成
- Name:
hello-lambda-flag - Flag type: Boolean
- Name:

SDK キーの取得
Lambda から LaunchDarkly に接続するために、SDK キーが必要です。
- 左メニューから「Settings」→「Environments」を選択
- 使用する環境(例: Production)の「SDK key」をコピー

⚠️ SDK キーは外部に公開しないよう注意してください。
Lambda での実装
依存関係の追加
LaunchDarkly の Python SDK をインストールします。
uv add launchdarkly-server-sdk
コード
今回は簡易的に SDK キーをハードコードしていますが、実際に運用する場合は、環境変数や AWS Secrets Manager などに格納し、参照してください。
import json import ldclient from ldclient import Context from ldclient.config import Config # LaunchDarkly SDKキー LD_SDK_KEY = "sdk-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # LaunchDarklyクライアントの初期化 ldclient.set_config(Config(LD_SDK_KEY)) def lambda_handler(event, context): # LaunchDarklyクライアントを取得 ld_client = ldclient.get() # コンテキストを作成 ld_context = Context.create("anonymous") # フィーチャーフラグを評価 flag_key = "hello-lambda-flag" flag_value = ld_client.variation(flag_key, ld_context, False) return { "statusCode": 200, "body": json.dumps( { "message": "hello world", "feature_flag": flag_key, "flag_enabled": flag_value, } ), }
コードのポイント
| 処理 | 説明 |
|---|---|
ldclient.set_config() |
SDK キーを指定してクライアントを初期化 |
Context.create("anonymous") |
フラグ評価の対象となるユーザー/コンテキストを作成 |
ld_client.variation() |
フラグの現在の値を取得(第3引数はデフォルト値) |
動作確認
フラグ OFF の状態
まず、フラグが OFF の状態で Lambda を実行します。
レスポンス:
{"message": "hello world", "feature_flag": "hello-lambda-flag", "flag_enabled": false}

フラグを ON に切り替え
LaunchDarkly のダッシュボードでフラグを ON に切り替えます。


フラグ ON の状態
再度 Lambda を実行すると、flag_enabled が true に変わります。
レスポンス:
{"message": "hello world", "feature_flag": "hello-lambda-flag", "flag_enabled": true}

コードを変更することなく、ダッシュボードからの操作だけで挙動が変わりました!
まとめ
LaunchDarkly Flag を使うことで、以下のメリットが得られます。
- コードのデプロイなしで機能の ON/OFF が可能
- ダッシュボードからリアルタイムに反映
- 問題発生時に即座にロールバックできる
特に、 Lambda は数が多くなることが多いため、もし問題が発生すると全てデプロイし直す必要があり大変ですが、 Flag を利用することで、即座にロールバックできることは魅力的だと思いました。
今回は Boolean 型のシンプルなフラグを使いましたが、LaunchDarkly では以下のような高度な機能も利用できます。
- ターゲティング: 特定のユーザーにだけ機能を公開
- パーセンテージロールアウト: 段階的に機能を展開
- A/B テスト: 複数のバリエーションを比較
ぜひ試してみてください!