プログレッシブロールアウトの設定

プログレッシブロールアウトは、時間の経過とともにユーザーに機能フラグを徐々に公開することを自動化し、手動介入を排除して運用の労力を削減します。 特定の割合と期間を設定して複数のフェーズを定義すると、 App Configuration がスケジュールに従ってフェーズ間の移行を自動的に管理します。

段階的な展開には、機能の導入においていくつかの利点があり、ユーザー体験の一貫性を維持しつつリスクを管理するのに役立ちます。 主なメリットは以下の通りです:

  • 自動化 :時間ベースの展開における手動による介入を排除します。
  • 一貫性 :展開の全過程を通じて、同じユーザーが同じ値を受け取ることを保証します。
  • 安全性 :問題が見つかった場合、どの段階でもロールアウトを停止することができます。
  • 柔軟性 :カスタムフェーズ構成やあらかじめ定義されたテンプレートに対応しています。
  • 予測可能性 :スケジュールに基づき、定期的に新機能のリリースを行います。

プログレッシブ・ロールアウトは、エンタープライズ・レベルのユーザーだけが利用できる。

開始前に

段階的な展開を設定する前に、以下の点を確認してください:

  • App Configuration Enterprise インスタンスを持っている
  • 適切なIAM権限(ManagerまたはWriterロール)を持っている
  • あなたの環境に機能フラグを作成した

構成上の制約

プログレッシブ・ロールアウトには特定の制約と要件があり、設定前に理解しておく必要がある。

一般的な制約

すべての段階的導入構成に適用される一般的な制約事項を確認してください。 これらの制約により、正常な動作が保証され、他の機能との競合が防止されます。

  • エンタープライズ・ティアが必要です :プログレッシブロールアウトはEnterpriseティアのユーザーのみ利用可能です。
  • 1 フラッグにつき1ロールアウト :プログレッシブロールアウトは、1つの機能フラグにつき1回のみ許可される。 フラグレベルでもルールレベルでも設定できるが、両方同時に設定することはできない。
  • 一度に一つのアクティブな配信戦略 :実験がフラグで実行されている場合、プログレッシブ・ロールアウトを作成することはできない。 同様に、プログレッシブロールアウトが実行中の場合、そのフラグで実験を開始することはできない。
  • パーセンテージの範囲 :ロールアウトのパーセンテージは1%から100%の間でなければならない。

スコープ別のAPI要件

使用するAPIは、段階的展開の設定の範囲によって異なります。 ロールアウトの設定を行う場所に応じて、適切なAPIを選択してください。

  • フラグレベルのプログレッシブロールアウト :機能フラグAPIを使用して、ロールアウトを作成および更新します。
  • ルールレベルのプログレッシブロールアウト :ルールAPIを使用して、ロールアウトを作成および更新する。
  • ロールアウトの停止 :アクティブなプログレッシブ・ロールアウトを停止するには、stop rollout APIを使用する。

スコープ別の構成要件

段階的なロールアウトを設定する前に、フラグまたはルールで、継承された値ではなく、明示的なロールアウト値が使用されていることを確認してください。 この要件により、競合を防ぎ、段階的な展開を完全に管理できるようになります。

  • フラッグレベルのプログレッシブロールアウトの場合 :どのターゲティングルールも、フラッグから継承された rolloutPercentage。 すべてのターゲティングルールは、オーバーライドされたロールアウト値を使用しなければならない。
  • ルールレベルのプログレッシブロールアウトの場合 :ロールアウトを追加するターゲティングルールでは、フラグから継承した値を使用することはできません。 ルールはそれ自身の明示的な値を持たなければならない。

プログレッシブ・ロールアウト中のブロック操作

段階的なロールアウトが実行中の場合、ロールアウトの整合性を維持し、競合を防ぐために、特定の操作がブロックされます。

  • 別のプログレッシブロールアウトを作成する :プログレッシブロールアウトは、1つのフラグにつき1つだけ許可されます。
  • 実験の開始実験は、すでにプログレッシブ・ロールアウトが実行されているフラッグでは実行できません。
  • コレクションの削除 :コレクションの削除: コレクションの削除は、関連する機能フラグが実行状態でプログレッシブロールアウトを持つ場合、ブロックされる。
  • セグメントの更新または削除 :セグメントの更新と削除は、関連するフィーチャーフラグが実行中の状態でプログレッシブロールアウトを持っている場合、ブロックされる。
  • フラグまたはルール設定の変更フラグまたはロールアウトを使用するターゲティングルールの更新は、プログレッシブロールアウトが実行されていない場合にのみ許可されます。

ライフサイクル行動

ライフサイクルの挙動を理解することで、段階的な展開と他の機能との相互作用を適切に管理できるようになります。 App Configuration では、配信戦略間を厳格に分離しています。

  • 実験が進行中であれば、プログレッシブ・ロールアウトを作成することはできない。
  • プログレッシブ・ロールアウトが実行されている場合、同じフラグで実験を開始することはできない。
  • ロールアウトを停止するには、専用のstop rollout APIを使用する必要がある。

プログレッシブロールアウトの設定

プログレッシブロールアウトは、フラグレベルまたはターゲティングルールレベルで設定できる。

フラグレベルのプログレッシブロールアウトの設定

プログレッシブロールアウトをフラグレベルで設定するには

  1. App Configuration、 Feature flagsに移動する。
  2. フィーチャーフラグを含む環境を選択します。
  3. 設定したい機能フラグをクリックします。
  4. Feature rollout セクションで、 Progressiveをロールアウトタイプとして選択する。
  5. ロールアウトの設定を行う:
    • 持続時間のプリセット :あらかじめ定義されたテンプレート ( 1hr, 12hr, 24hr, 48hr ) から選択するか、 カスタムを選択します
    • フェーズ :各フェーズをパーセンテージと期間で定義する
    • 後でスケジュールする (オプション):このオプションを切り替えると、ロールアウトの開始時刻をUTCで指定できます。 有効になっていなければ、ロールアウトは直ちに開始される。
  6. 保存 をクリックします。

プログレッシブロールアウトは、設定された開始時刻に自動的に開始される。

ルールレベルのプログレッシブロールアウトの設定

ターゲティングルールレベルでプログレッシブロールアウトを構成するには:

  1. App Configuration、 Feature flagsに移動する。
  2. フィーチャーフラグを含む環境を選択します。
  3. 設定したい機能フラグをクリックします。
  4. [ ターゲティング ] セクションで、設定したいルールを選択します。
  5. ルールにオーバーライド値があることを確認する。
  6. ルールのロールアウト・ セクションで、ロールアウト・タイプとしてプログレッシブを選択する。
  7. ロールアウトの設定を行う:
    • 持続時間のプリセット :あらかじめ定義されたテンプレート ( 1hr, 12hr, 24hr, 48hr ) から選択するか、 カスタムを選択します
    • フェーズ :各フェーズをパーセンテージと期間で定義する
    • 後でスケジュールする (オプション):このオプションを切り替えると、ロールアウトの開始時刻をUTCで指定できます。 有効になっていなければ、ロールアウトは直ちに開始される。
  8. 保存 をクリックします。

段階的な展開

プログレッシブ・ロールアウトは複数のフェーズで構成され、それぞれがパーセンテージと期間を定義する。

フェーズ構成

段階的な導入の各フェーズについて、割合と期間を定義してください。 各フェーズは、展開の進捗を管理する2つの主要な要素で構成されています。

各段階には以下のようなものがある:

  • パーセンテージ :有効な値を受け取るユーザーの割合 (1-100%)
  • 期間 :このフェーズの継続時間 (例: " 8h ", " 30m ", " 2d ")

最終段階は完了状態を表すため、期間は必要ない。

フェーズの例

さまざまなシナリオにおける段階的導入フェーズの構成例を確認してください。

例1:段階的な24時間展開

{
  "phases": [
    { "percentage": 5, "duration": "6h" },
    { "percentage": 25, "duration": "6h" },
    { "percentage": 50, "duration": "6h" },
    { "percentage": 100, "duration": "6h" }
  ]
}

例2:1時間の迅速なロールアウト

{
  "phases": [
    { "percentage": 10, "duration": "15m" },
    { "percentage": 50, "duration": "15m" },
    { "percentage": 100, "duration": "30m" }
  ]
}

例3:保守的な48時間のロールアウト

{
  "phases": [
    { "percentage": 5, "duration": "12h" },
    { "percentage": 10, "duration": "12h" },
    { "percentage": 25, "duration": "12h" },
    { "percentage": 100, "duration": "12h" }
  ]
}

定義済みのロールアウト・テンプレート

App Configuration は、一般的なロールアウトシナリオ用の定義済みテンプレートを提供します:

定義済みのロールアウト・テンプレート
テンプレート Duration フェーズ
1hr 1 時間 10% ( 15m )、50% ( 15m )、100% ( 30m )
12hr 12 時間 5% ( 3h )、25% ( 3h )、50% ( 3h )、100% ( 3h )
24hr 24 時間 5% ( 6h )、25% ( 6h )、50% ( 6h )、100% ( 6h )
48hr 48時間 5% ( 12h )、10% ( 12h )、25% ( 12h )、100% ( 12h )

プログレッシブ・ロールアウトの停止

段階的なロールアウトを停止すると、 App Configuration は、手動ロールアウトモードに戻すためにいくつかのクリーンアップ処理を実行します。

  • ロールアウト構成が削除されました。
  • ロールアウトのパーセンテージが指定されたパーセンテージに更新される
  • ロールアウトの種類が手動ロールアウトに戻る
  • 有効化された値を受け取っていたユーザーは、停止されたパーセンテージに基づき、その値を受け取り続ける

問題が検出された場合、どの段階でもプログレッシブ・ロールアウトを停止することができる。 ロールアウト構成の範囲に応じて、適切なAPIを使用してください。

  • フラグレベルのロールアウトを停止する :機能フラグレベルで設定された段階的なロールアウトを停止するには、機能フラグ用のロールアウト停止 API を使用します。
  • ルールレベルのロールアウトを停止する :ターゲティング・ルールレベルで設定された段階的なロールアウトを停止するには、ルール用のロールアウト停止 API を使用します。

進行中のロールアウト完了

段階的な展開が最終段階に達すると、 App Configuration は自動的にクリーンアップを実行し、手動展開モードに戻ります。

  • ロールアウト構成は自動的に削除されます。
  • 展開率は、最終段階の割合(通常は100%)に更新されます。
  • ロールアウト方式が手動ロールアウトに戻ります。
  • すべてのユーザーに、有効化された値が渡されます。

ユーザーの一貫性と無作為化

段階的なロールアウトでは、2段階のランダム化戦略を採用することで、ロールアウト内での挙動を予測可能に保ちつつ、異なるロールアウトサイクル間で柔軟性を確保し、一貫したユーザー体験を実現します。

ロールアウト内

段階的な展開の各段階において、 App Configuration は各ユーザーに対する割り当てを一貫して維持し、すべてのフェーズを通じて安定した利用体験を確保します。

  • entity_id によると、ランダム化は決定論的である。
  • 同じ entity_id には、常に同じ代入が行われます。
  • フェーズ1で有効化された値を受け取ったユーザーは、その後のフェーズでも引き続きその値を受け取ります。
  • 割合が増加するにつれて、新規ユーザーが追加されます。

ロールアウト

同じフラグで新しい段階的展開を開始すると、 App Configuration は、ユーザーごとの露出パターンを変えられるよう、新しい配布を生成します。

  • 新しいランダムな分布が生成されます。
  • 同じ entity_id に対して、異なる代入が行われる場合があります。
  • これにより、異なるユーザーグループを、それぞれ異なる展開サイクルで公開することが可能になります。

プログレッシブ・ロールアウトのモニタリング

段階的な展開状況を監視し、予定通りに進んでいることを確認するとともに、展開プロセス中に発生する可能性のある問題を迅速に特定してください。

  • ダッシュボード画面 : App Configuration のダッシュボードには、現在進行中の段階的展開の現在のステータスとフェーズが表示されます。
  • ステータスインジケーター
    • QUEUED: 展開は予定されているが、まだ開始されていない。
    • RUNNING: 展開は各フェーズを通じて順調に進められています。
  • アクティビティの追跡 : Activity Tracker を使用して、ロールアウトイベントやフェーズの遷移を追跡します。

ベスト・プラクティス

ここに挙げたベストプラクティスに従うことで、段階的な導入を確実に成功させ、ユーザーやアプリケーションに対するリスクを最小限に抑えることができます。

  • まずは小規模から始めましょう :リスクを最小限に抑えるため、低い割合(5~10%)から始めます。
  • メトリクスの監視 :各フェーズにおいて、アプリケーションのメトリクスを継続的に監視する。
  • タイムゾーンへの配慮 :開始時間を設定する際は、ユーザー層のタイムゾーンを考慮してください。
  • テスト構成 :ロールアウト構成は、まず本番環境以外の環境でテストしてください。
  • 導入計画の文書化 :導入戦略および各フェーズに関する文書を整備・維持してください。
  • ロールバック計画を策定する :問題が発生した場合は、展開を中止するための計画を立てておく。
  • 適切な期間を設定する :各フェーズにおいて、有意義なデータを収集できるよう、十分な時間を確保する。

APIリファレンス

プログレッシブ・ロールアウトは、 App Configuration APIを使って設定できる。 詳細は APIドキュメントを 参照。