LaunchDarkly 入門:Lambda で機能フラグを試してみた

記事タイトルとURLをコピーする

はじめに

re:Invent の AWS Jam にて、 LaunchDarkly を使う課題がありました。 復習を兼ねて、 AWS Lambda と LaunchDarkly を連携させて、機能フラグの基本的な使い方を体験します。

LaunchDarkly は、機能フラグ(Feature Flag)を管理するための SaaS プラットフォームです。コードをデプロイし直すことなく、ダッシュボードから機能の ON/OFF をリアルタイムに切り替えられます。


LaunchDarkly の準備

アカウント作成

LaunchDarkly 公式サイト からアカウントを作成します。無料トライアルすることができます。

フラグの作成

LaunchDarkly のダッシュボードからフラグを作成します。

  1. 左メニューから「Feature flags」を選択
  2. 「Create flag」をクリック
  3. 以下の設定でフラグを作成
    • Name: hello-lambda-flag
    • Flag type: Boolean

SDK キーの取得

Lambda から LaunchDarkly に接続するために、SDK キーが必要です。

  1. 左メニューから「Settings」→「Environments」を選択
  2. 使用する環境(例: 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_enabledtrue に変わります。

レスポンス:

{"message": "hello world", "feature_flag": "hello-lambda-flag", "flag_enabled": true}

コードを変更することなく、ダッシュボードからの操作だけで挙動が変わりました!


まとめ

LaunchDarkly Flag を使うことで、以下のメリットが得られます。

  • コードのデプロイなしで機能の ON/OFF が可能
  • ダッシュボードからリアルタイムに反映
  • 問題発生時に即座にロールバックできる

特に、 Lambda は数が多くなることが多いため、もし問題が発生すると全てデプロイし直す必要があり大変ですが、 Flag を利用することで、即座にロールバックできることは魅力的だと思いました。

今回は Boolean 型のシンプルなフラグを使いましたが、LaunchDarkly では以下のような高度な機能も利用できます。

  • ターゲティング: 特定のユーザーにだけ機能を公開
  • パーセンテージロールアウト: 段階的に機能を展開
  • A/B テスト: 複数のバリエーションを比較

ぜひ試してみてください!


参考リンク