App Lifecycle Manager の機能フラグの概要

App Lifecycle Manager のフィーチャー トグルを使用すると、新しいコードのデプロイや インフラストラクチャの変更を必要とせずに、アプリケーション内の 機能の可用性と動作を制御できます。

フラグは主に次の 2 つの方法で使用できます。

  1. 統合: App Lifecycle Manager で管理されるアプリケーション デプロイとフラグ管理を組み合わせます。
  2. スタンドアロン: アプリケーション インフラストラクチャが別の場所で管理されている場合でも、システム コンポーネントを App Lifecycle Manager ユニットとしてモデル化することで、堅牢なフラグ設定システムを個別に使用できます。

フィーチャー フラグは、ユニットやロールアウトなど、App Lifecycle Manager のコアコンセプトと統合されています。これにより、アプリケーション インフラストラクチャとともにフラグ構成を管理できます(統合アプローチ)。

App Lifecycle Manager ユニットまたはロールアウトに慣れていない場合は、メインのApp Lifecycle Manager の概要をご覧ください。

App Lifecycle Manager のフィーチャー トグルを使用する理由

App Lifecycle Manager でフィーチャー トグルを実装すると、SaaS の開発と運用のライフサイクルに次のようなメリットがあります。

  • 機能リリースとコード デプロイを分離する: デフォルトで機能が無効になっている新しいコードを本番環境にリリースします。準備ができたら、特定のユーザーに対して機能を有効にするか、段階的にロールアウトすることで、大規模なデプロイに関連するリスクを軽減できます。
  • 安全性、速度、信頼性を向上させる:
    • 限定されたユーザーで本番環境の機能をテストします(カナリア リリース)。
    • App Lifecycle Manager のロールアウト機能を使用して段階的なロールアウトを実行し、潜在的な問題の影響を最小限に抑えます。
  • 許可リストとテナントのカスタマイズを有効にする: テナント、サービス、環境を表すユニットの機能を有効または無効にします。
  • ロールバックを簡素化する: フィーチャー トグルを無効にすると、多くの場合、アプリケーションの以前のバージョンをデプロイするよりもはるかに高速で、中断も少なくなります。このワークフローでは、バイナリをロールバックせずに問題のある機能を無効にできます。
  • フラグ構成の統合管理: フィーチャー トグルの定義を管理し、それを使用してロールアウトを構成します。このワークフローでは、フィーチャー トグルのロールアウトを作成してアプリケーションの機能を変更できるため、運用の信頼性が向上します。

App Lifecycle Manager のフィーチャー トグルの仕組み

App Lifecycle Manager でフィーチャー トグルを使用するには、管理プレーン(フラグの定義とロールアウト)とデータプレーン(アプリケーション内のフラグ値へのアクセス)の 2 つの主な側面があります。

App Lifecycle Manager との統合使用

App Lifecycle Manager を使用してアプリケーション デプロイを管理する場合(Terraform ブループリントを使用してインフラストラクチャをデプロイするなど):

  1. フラグを定義する: App Lifecycle Manager 内にフィーチャー トグルリソースを作成し、一意の Flag keyenable-new-dashboard など)を指定して、ユニットの種類に関連付けます。ブール値フラグがサポートされています。
  2. フラグの変更をプロビジョニングする: フラグの変更(作成または更新)は、App Lifecycle Manager のロールアウトを開始するまで有効になりません。これにより、フラグのデプロイにバッチ、監督、安全チェックなどの機能を使用できます。 ロールアウトにより、ターゲット ユニットに関連付けられたフラグ構成が更新されます。
  3. アプリケーションでフラグにアクセスする: プロビジョニングされたユニット内で実行されるアプリケーション コード(Cloud Run または Google Kubernetes Engine のコンテナなど)は、flagd プロバイダで構成された OpenFeature SDK を使用します。 このプロバイダは、saasconfig.googleapis.com サービス エンドポイントに接続します。 App Lifecycle Manager を使用して、必要なユニット ID をアプリケーション環境に挿入し、SDK がその特定のユニットの正しいフラグ値を取得できるようにします。

この緊密な統合により、インフラストラクチャのライフサイクルとともに機能のライフサイクルを管理できます。実際の例については、フィーチャー トグルのデプロイのクイックスタートをご覧ください。

管理プレーン

管理プレーンを操作して、フラグを定義して制御します。コンソール、gcloud CLI、または App Lifecycle Manager API を 使用して Google Cloud 、次の操作を行うことができます。

  • フラグを作成または更新する: フラグを定義するには、Flag key を指定してユニットの種類に関連付け、そのタイプとデフォルト値を設定します。
  • ロールアウトを作成する: ロールアウトを開始して、フラグのユニットの種類に属するターゲット ユニットにフラグの変更(作成または更新)を配信します。ロールアウトにより、構成されたポリシーに従って変更が安全かつ確実に適用されます。

データプレーン

アプリケーション コードはデータプレーンと連携してフラグ値を使用します。

  • OpenFeature SDK: ベンダーに依存しない OpenFeature SDK をアプリケーションに統合します。
  • flagd プロバイダ: flagd プロバイダを使用するように OpenFeature SDK を構成します。
  • 構成: flagd プロバイダを App Lifecycle Manager のフィーチャー トグルサービス エンドポイント saasconfig.googleapis.com:443 に指定します。
  • ターゲティング: フラグ構成を識別する provider_id を指定します。通常、この値は App Lifecycle Manager ユニットのリソース名の完全名(projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID など)に対応します。
  • 認証: プロバイダはアプリケーションのデフォルト認証情報(ADC)を使用して、サービス エンドポイントへのリクエストを安全に認証します。 Google Cloud 使用するサービス アカウントには、roles/saasconfig.viewer Identity and Access Management ロールが必要です。
  • フラグの評価: コードで標準の OpenFeature メソッド(client.get_boolean_value(...)を使用して、フラグ値を確認します。プロバイダは、サービスから最新のロールアウト構成を取得します。

App Lifecycle Manager には、データプレーンと統合するためのリファレンス実装と例が用意されています。

フィーチャー トグルの値の型

App Lifecycle Manager のフィーチャー トグルは、標準のオン/オフのブール値評価よりも多くの機能をサポートしています。STRINGINTEGERDOUBLE の値を持つフラグを定義して、ランタイムのしきい値、テーマ パラメータ、構成の上限など、複雑な運用変数を制御できます。

ブール値フラグとは異なり、返される可能性のある型の範囲を指定するには、作成時にブール値以外のフラグを明示的に定義する必要があります。

文字列フラグ

文字列フラグは、構成識別子を接続されたクライアントに直接渡します。

gcloud beta app-lifecycle-manager flags create "feature-mode" \
  --key="feature-mode" \
  --flag-value-type=STRING \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "standard", "stringValue": "STANDARD"}, {"id": "advanced", "stringValue": "ADVANCED"}]' \
  --evaluation-spec='{"defaultTarget": "standard"}'

整数フラグ

整数フラグは、正確な数値制限とペイロードの境界を管理します。

gcloud beta app-lifecycle-manager flags create "max-retry-count" \
  --key="max-retry-count" \
  --flag-value-type=INTEGER \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "low", "integerValue": 3}, {"id": "high", "integerValue": 10}]' \
  --evaluation-spec='{"defaultTarget": "low"}'

倍精度浮動小数点数フラグ

倍精度浮動小数点数フラグは、確率のしきい値または浮動小数点パラメータに使用される高精度の値を配信します。

gcloud beta app-lifecycle-manager flags create "sampling-rate" \
  --key="sampling-rate" \
  --flag-value-type=DOUBLE \
  --location="global" \
  --unit-kind="demo-test-unitkind" \
  --variants='[{"id": "minimal", "doubleValue": 0.01}, {"id": "full", "doubleValue": 1.0}]' \
  --evaluation-spec='{"defaultTarget": "minimal"}'

ロールアウトを使用してフィーチャー トグルをプロビジョニングする

App Lifecycle Manager は、ロールアウトを使用してフィーチャー トグルの更新をプロビジョニングすることで、大規模な変更や更新を安全に行えるようにします。

段階的なロールアウトがない場合、フラグ構成の小さな変更(たとえば、1% のユーザーに対して機能を有効にする)は、すべてのアプリケーション インスタンスに瞬時に伝播します。この機能で回帰が発生すると、インフラストラクチャ全体で同時に問題が発生する可能性があります。このグローバルな伝播により、サービスに広範囲に影響するリスクが大幅に高まります。

App Lifecycle Manager のロールアウトでは、フラグの変更を段階的に制御して配信できるため、予期しない問題の潜在的な範囲を制限することで、このリスクを軽減できます。

フィーチャー トグルセット

フィーチャー トグルセットは、複数のフィーチャー トグルをグループ化し、単一の論理リソースとして管理できるようにします。これは、複数のフラグの調整が必要な機能をリリースする場合に便利です。

詳しくは、フラグセットをご覧ください

マニフェスト

マニフェストを使用すると、JSON ファイルを使用してフィーチャー トグルを定義して管理できます。これらの定義を App Lifecycle Manager API にプッシュすることも、既存の構成をプルしてアプリケーションの型安全なアクセサを生成することもできます。

詳しくは、マニフェストをご覧ください

複雑なターゲティング

Common Expression Language(CEL)を使用して、ユーザーまたはリクエストの属性に基づいて高度なターゲティング ルールを作成し、どのユーザーにどの機能を表示するかを正確に制御できます。

詳しくは、複雑なターゲティングをご覧ください

マルチテナント アーキテクチャ

特定のユニットまたはユニットのグループ(ラベルまたはテナントを使用)にフラグをターゲット設定する場合は、App Lifecycle Manager でマルチテナント デプロイを使用できます。テナント フリート全体で段階的なロールアウトを実装することもできます。

詳しくは、マルチテナント アーキテクチャをご覧ください

フィーチャー トグルを割り当てる

割り当て(試験運用版、ベースラインなど)を定義し、トラフィック分割を使用してテストまたはランダム化されたロールアウトを実行します。

詳しくは、フィーチャー トグルの割り当てをご覧ください

次のステップ