AWS AppConfigで Feature Flag

Feature Flagとは?

ソフトウェア開発において、新機能のリリースをコントロールする仕組みの1つとしてFeature Flag(フィーチャーフラグ)というものがあります。
ソフトウェア開発では、新しいコードを本番環境にデプロイするときにすべてのユーザーが一度に利用開始するのが従来のやり方でした。でも、それだと不具合があった場合に全ユーザーが巻き込まれるリスクがあります。従来の「コードを本番にデプロイしたら全ユーザーが一斉に利用開始」という方式から脱却し、リリースのリスクを最小化しながら段階的にユーザーへ展開できます。

AWSにはネイティブのFeature Flagソリューションである AWS AppConfig Feature Flags があり、セーフティガード付きで本番環境への新機能リリースを支援します。

従来のリリース手法と課題

従来のリリースプロセスは以下の流れでした。

  1. 機能を実装
  2. QA環境でテスト
  3. マーケティングのスケジュールに合わせて本番へデプロイ

リリース当日は「一斉公開」になるため、もし不具合があれば全ユーザーが即座に影響を受けるリスクがあります。この「push-and-pray deployment(祈りのデプロイ)」では、運用チームが緊張しながらメトリクスを監視することになります。

Feature Flagによるモダンなリリース

Feature Flagを導入すると、コードと設定を分離できます。

  1. コードは本番にデプロイするが、機能はフラグで隠しておく
  2. 内部ユーザーや特定の顧客にのみ機能を限定公開
  3. モニタリングしながら段階的に公開範囲を拡大
  4. 問題がなければ最終的に全ユーザーへ展開

これにより、安全かつ計測可能なリリースが実現します。

Feature Flagの主なユースケース

Feature Flagには用途に応じた種類があります。

  • リリースフラグ
    新機能を段階的に展開し、安定性を確認しながら全ユーザーへリリース。
  • 実験(A/Bテスト)フラグ
    UIやアルゴリズムの複数バージョンを比較し、データに基づいた意思決定を可能にする。
  • 運用フラグ
    同時処理数やスロットル値などを設定し、負荷や障害時に即時調整できる。

AWS AppConfig Feature Flagsの特長

AWS AppConfigを用いると、以下の安全機能を備えたFeature Flag運用が可能です。

  • バリデーション
    • フラグの値に制約(数値の最小・最大値、正規表現、列挙型など)を設定し、誤った設定が本番環境に流れないよう防止
    • 値に制約(例: 数字の範囲、日付の形式など)を付けられるので、間違った設定が本番に入らない
  • デプロイ戦略
    • フラグの更新を一気に反映するか、カナリアリリース/段階的リリースで徐々に展開するかを選択可能
    • 「10%のユーザー → 50%のユーザー → 全員」というように少しずつ公開できる
  • 自動ロールバック
    • CloudWatchアラームが発火した場合、更新が自動的にロールバック
    • 障害時の対応を迅速かつ自動的に実施することができる
  • 高度なターゲティング
    • ユーザーIDや顧客層ごとのターゲティング、トラフィックスプリットによる細かな制御が可能
    • 特定のユーザーや顧客層だけに新機能を提供することが可能

こうした制約により、安全な設定管理が可能です。

運用のベストプラクティス

1. カナリアリリースを活用する

新機能をいきなり全ユーザーに公開するのではなく、まずはごく一部のユーザーにだけ展開して挙動を確認する方法がカナリアリリースです。これにより、問題が発生した場合は影響範囲を最小限に抑えられます。もし異常が検知されたら、Feature Flagを即座にOFFに切り替えることで、安全に機能を停止できます。

2. 監視ツールとの連携で異常を検知

Feature Flagの切り替えは便利ですが、常に安全とは限りません。そこで重要なのが監視との連携です。AWS CloudWatchやDatadogなどのモニタリングサービスと連携させて、レスポンス時間やエラーレートといったメトリクスを監視しましょう。異常値を検知したら自動的にアラートを発砲し、必要に応じてロールバックやフラグOFFに即応できます。

3. JSON Schemaによるバリデーション設定

Feature Flagの設定内容に誤りがあると、本番環境で予期せぬ挙動を引き起こす可能性があります。そこで役立つのがJSON Schemaによるバリデーションです。例えば「割引率は0〜50の範囲内」「日付はYYYY-MM-DD形式」といった制約を設定しておくことで、不正な値が適用されることを防げます。結果として、運用の安全性が大幅に向上します。

4. 環境ごとの管理で安全性を高める

最後に、環境ごとの管理も忘れてはいけません。開発環境(dev)、ステージング環境(stg)、本番環境(prod)を分けて管理し、必ず本番前に十分なテストを行うことが重要です。Feature Flagも環境ごとに切り替えを制御することで、リリース前にリスクを検証し、安心して本番適用できます。

まとめ

Feature Flagは、「デプロイ」と「リリース」を分離するモダンな開発・運用手法です。

カナリアリリース・監視・バリデーション・環境分離を組み合わせることで、安全かつ信頼性の高いFeature Flag運用が実現できます。

AWS AppConfigを利用すれば、

  • セーフティガード付きでの安全なリリース
  • 段階的な機能展開
  • ユーザー層ごとの精密なターゲティング

を実現できます。従来の「祈りのデプロイ」から脱却し、計画的かつ信頼性の高いリリース戦略を構築していきましょう!

Author

 Hisaこと久末 瑠紅、2021年8月にクリエーションライン株式会社(CL; CREATIONLINE)に入社。Organization Development Team(ODT)というチームにて組織開発や研修コンテンツ作成に携わったのち、現在はAgile CoEというチームにてアジャイル開発の実施や普及活動に従事。

Hisa (Ryuku Hisasue)の記事一覧

新規CTA