AWS AppConfig で実装するフィーチャーフラグ - 安全な設定デプロイとロールバック
コードデプロイとは独立した設定変更を、Linear / Exponential 戦略で段階的にロールアウトする。CloudWatch アラーム連動の自動ロールバックで安全性を確保します。
AppConfig の概要
AppConfig はアプリケーションの設定を安全にデプロイするサービスです。フィーチャーフラグ、チューニングパラメーター、許可リストなどの設定を、コードデプロイとは独立して変更できます。設定変更は段階的にロールアウトされ、モニターに設定したアラームで自動ロールバックできます。Lambda、ECS、EC2 上のアプリケーションから SDK またはエクステンション経由で設定を取得します。Systems Manager の一機能として提供されますが、独立したサービスエンドポイントを持ち、AppConfig 専用のコンソール画面で管理します。設定プロファイルにはフリーフォーム (YAML/JSON/テキスト) とフィーチャーフラグ (構造化された ON/OFF とバリエーション) の 2 種類があり、用途に応じて使い分けます。
デプロイ戦略と自動ロールバック
デプロイ戦略はロールアウトの速度を制御します。Linear (線形) は一定間隔で均等にデプロイし、Exponential (指数) は最初は少数のホストに適用して徐々に拡大します。AWS が提供するプリセット戦略として AppConfig.Linear50PercentEvery30Seconds (テスト用の高速デプロイ) や AppConfig.AllAtOnce (即時反映) があり、カスタム戦略ではデプロイ時間、成長係数、最終ベイク時間を設定できます。CloudWatch アラームをモニターに設定すると、デプロイ中にアラームが発火した場合に自動ロールバックが実行されます。例えばエラー率のアラームを設定し、新しい設定でエラーが増加した場合に前の設定に戻します。バリデーターは JSON Schema による構文チェックと Lambda 関数による論理チェックの 2 種類があり、不正な設定値をデプロイの前に検証します。Lambda バリデーターでは外部 API の呼び出しやデータベース参照による高度な検証も実装できます。
フィーチャーフラグの設計パターン
フィーチャーフラグは JSON 形式で定義し、各フラグに有効/無効の状態と属性 (対象ユーザー、ロールアウト率) を設定します。段階的ロールアウトでは、最初に社内ユーザーの 5% に新機能を公開し、エラー率を監視しながら 25%、50%、100% と拡大します。Lambda エクステンションはフラグの値をキャッシュし、設定の取得の呼び出しを減らします。環境ごと (dev/staging/prod) に異なるフラグ値を設定し、本番環境のみで段階的ロールアウトを適用する運用にできます。
他のフィーチャーフラグ方式との比較
フィーチャーフラグの実装方式として、AppConfig 以外にも環境変数、パラメータストア、LaunchDarkly 等の SaaS、自前のデータベースフラグテーブルがあります。環境変数は単純ですが変更にデプロイが必要で段階的ロールアウトもありません。Systems Manager パラメータストアはリアルタイム取得が可能ですが、段階的デプロイ戦略やロールバック機構は内蔵されていません。LaunchDarkly 等の SaaS はユーザーセグメンテーションやターゲティングの機能を持ちますが、外部サービスへの依存と月額コストが発生します。AppConfig は AWS のサービスで、段階的デプロイと CloudWatch アラームによるロールバックを同じ仕組みで扱えます。一方、ユーザー属性に基づく細かなターゲティング (A/B テスト等) が必要な場合は外部 SaaS も選択肢になります。
運用のベストプラクティスと落とし穴
運用では、フラグの命名にプレフィックス規約 (機能名-フラグ名) を設け、数が増えても検索しやすくします。不要になったフラグは速やかに削除し、コードベースに残った参照が技術的負債になることを防ぎます。デプロイ戦略のベイク時間 (FinalBakeTimeInMinutes) は、アプリケーションのメトリクスが安定するまでの時間以上に設定します。短すぎるとエラーが表面化する前にデプロイが完了してしまい、ロールバックが発動しません。Lambda エクステンションのポーリング間隔はデフォルト 45 秒ですが、設定変更を早く反映したい場面では、間隔を短くできます。ただし間隔を短くするとリクエスト数が増えコストに影響するため、トラフィック量と応答速度のバランスを考慮します。大量のフラグを 1 つのプロファイルに詰め込まず、マイクロサービスごとにプロファイルを分けます。
AppConfig の料金
AppConfig の料金は、設定の取得のリクエストなどの使用量に応じて発生します。Lambda エクステンションでキャッシュを有効にすると、ポーリング間隔 (デフォルト 45 秒) ごとに 1 回のリクエストに集約され、Lambda の呼び出し回数が多くてもリクエスト数を抑えられます。
まとめ
AppConfig はフィーチャーフラグと設定値を、コードデプロイとは独立して安全にデプロイするサービスです。Linear や Exponential のデプロイ戦略で段階的にロールアウトし、CloudWatch アラーム連動の自動ロールバックで設定変更によるインシデントのリスクを抑えます。Lambda エクステンションで設定をキャッシュして取得できます。AWS のサービスの中で段階的デプロイを行え、フラグの管理とデプロイ戦略を設計しておくと、機能をリリースしやすくなります。
参考資料 (AWS 公式)
本ページの一次情報は AWS 公式サイトと公式ドキュメントです。最新の仕様と料金は次の公式ページで確認できます。
本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。