このドキュメントでは、App Lifecycle Manager を使用して SaaS サービスを更新する方法について説明します。
App Lifecycle Manager を使用すると、ロールアウトを使用して、プロビジョニングされた複数のユニットに更新を適用できます。ロールアウトは、UnitKind に基づいてユニットをターゲットにします。必要に応じて、Google Cloud CLI を使用してフィルタ(unit_filter)を適用し、特定のユニットのサブセットをターゲットにすることもできます。これにより、デプロイされたベース全体でマネージド アップデートが可能になります。ロールバックは、ユニットを以前のリリースにアップグレードすることで実行できます。
単一の特定のユニットに対するオペレーションを行うには、[ユニットの詳細] ページにあるコントロールを使用します。
始める前に
アプリのサービスを更新する前に、次のことを行う必要があります。
- App Lifecycle Manager が有効になっていることを確認します。
- App Offering の作成に必要な IAM 権限があることを確認します。
- アプリのオファリングを作成する。
- UnitKind を作成する。
- ユニットを作成してプロビジョニングする。
- 新しい Terraform ブループリントまたは変更された Terraform ブループリントを準備します。
リリースを作成する
アプリのサービスを更新する前に、リリースを作成する必要があります。リリースは、ブループリント パッケージとその関連構成で定義された SaaS アプリケーションの特定のバージョンを表します。基本的に、リリースにはユニットの更新が含まれます。
コンソール
App Lifecycle Manager に移動します。
[リリース] をクリックします。
[リリース] ページで [作成] をクリックします。
[リリースの作成] ページで、次の操作を行います。
- [リリース名] ボックスに、リリースの一意の名前を入力します。
- [ユニットの種類] ボックスで、このリリースに関連付けるユニットの種類を選択します。
- [Only upgradeable from (optional)] セクションで、必要に応じて、ユニットをこのリリースにアップグレードできるリリースを選択できます。これにより、アップグレード パスを制御できます。
- [ブループリントを作成] ステップと [ブループリントを保存] ステップで、ブループリントを選択または作成します。ブループリント作成オプションの詳細については、ブループリントのドキュメントをご覧ください。
[変数(省略可)] セクションで、必要に応じてこのリリースの入力変数を設定できます。変数の設定の詳細については、変数のドキュメントをご覧ください。
[作成] をクリックします。
リリースを作成しました。リリースの詳細は、[リリースの詳細] ページで確認できます。このリリースは、ロールアウトの作成時に参照できます。
gcloud
Google Cloud コンソールを使用してリリースを作成するには:
gcloud app-lifecycle-manager releases create RELEASE_NAME --blueprint-package=BLUEPRINT_PACKAGE_URI --unit-kind=UNIT_KIND [--location=LOCATION] [--labels=[KEY=VALUE,...]] [--upgradeable-from-releases=[RELEASE_NAME,...]] [--input-variable-defaults=[variable=VARIABLE,value=VALUE,type=TYPE,...]]
次のように置き換えます。
RELEASE_NAME: 作成するリリースの ID。これは、リリースの完全なリソース名の一部になります。BLUEPRINT_PACKAGE_URI: このリリースで使用するブループリント パッケージの URI。ブループリントは、Artifact Registry または別の OCI レジストリでホストされている OCI イメージです。- ブループリント パッケージには、ユニットのプロビジョニングに必要なアーティファクトが含まれています。また、使用されるエンジン(Terraform)に関するメタデータとバージョンも含まれています。
- URI でホスト名を省略すると、デフォルトでリージョンの Artifact Registry パス(
us-east1-docker.pkg.devなど)になります。 - ブループリントの作成の詳細については、ブループリントのドキュメントをご覧ください。
UNIT_KIND: このリリースに対応するユニットタイプの ID または完全修飾識別子。UNIT_KIND は、リリースを作成した後は変更できません。LOCATION: リリースを作成するロケーション。このフラグは、完全な URI パスが指定されていない場合に、リリース場所のフォールバック値を提供します。デフォルトは、Google Cloud CLI 環境で構成されたロケーションです。LABELS: (省略可)分類のためにリリースに適用するラベル。ラベルは Key-Value ペアです。- キーは小文字で始まり、使用できるのはハイフン、アンダースコア、小文字、数字のみです。
- 値に使用できるのは、ハイフン、アンダースコア、小文字、数字のみです。
- 例:
--labels=environment=staging,team=app-lifecycle-manager
UPGRADEABLE_FROM_RELEASES:(省略可)作成する新しいリリースで更新できる既存のリリースを指定する、リリース名のカンマ区切りのリスト。- このフラグを空のままにすると、このリリースに更新できるリリースに制約はありません。
- 指定すると、このリリースへのユニット更新リクエストにこの制約が適用されます。
INPUT_VARIABLE_DEFAULTS:(省略可)ブループリントに必要な入力変数のデフォルト値。- 変数のデフォルトは、インラインで指定することも、YAML ファイルまたは JSON ファイルを参照して指定することもできます。
- ここで定義した変数は、ロールアウトの作成時にオーバーライドできます。
変数の設定の詳細については、変数のドキュメントをご覧ください。リリースの詳細については、Release Google Cloud CLI リファレンスをご覧ください。
ロールアウトの種類の作成
ロールアウトを作成する前に、リリースをユニットにデプロイする方法のテンプレートとして機能するロールアウトの種類を作成する必要があります。
コンソール
App Lifecycle Manager に移動します。
[ロールアウトの種類] をクリックします。
[ロールアウトの種類] ページで、[作成] をクリックします。
[Create a rollout kind] ページで、次の操作を行います。
- [ロールアウトの種類名] ボックスに、ロールアウトの種類の名前を入力します。
- [ユニットの種類] ボックスで、リリースで更新するユニットの種類を詳しく指定します。
[ロールアウト戦略] プルダウンで、リリースをユニットにデプロイするために使用する戦略を選択します。
- 1 回に 1 つのロケーション(シンプル): 一度に 1 つのロケーションを更新します(ソーク時間なし)。最大 5% のユニットを同時に更新します。
- 一括(シンプル): すべてのロケーションが同時に更新を開始します(開発環境や緊急シナリオに最適)。
- 段階的(漸進的): 複数のロケーションにわたって、バッチの割合を指数関数的に増やしながら、段階的にアップデートをデプロイします(ソーク時間あり)。
- プログレッシブ(単一のロケーション): ユニットをパーセンテージ バッチで更新し、ソーク時間を延長して、単一のロケーション内の問題を検出します。
ロールアウト戦略の詳細については、ロールアウト戦略をご覧ください。
[作成] をクリックします。
ロールアウトの種類を作成しました。[ロールアウトの種類の詳細] ページで、ロールアウトの種類のパラメータを表示して編集できます。
gcloud
Google Cloud コンソールを使用してロールアウトの種類を作成するには:
gcloud app-lifecycle-manager rollout-kinds create ROLLOUT_KIND_NAME --unit-kind=UNIT_KIND --location=LOCATION --rollout_strategy=ROLLOUT_STRATEGY --error_budget=ERROR_BUDGET --unit_filter=UNIT_FILTER --update_unit_kind_default=UPDATE_UNIT_KIND_DEFAULT
次のように置き換えます。
ROLLOUT_KIND_NAME: ロールアウトの種類の名前。UNIT_KIND: リリースを適用するユニットを定義します。リリースは、選択したユニットタイプのすべてのユニットに適用されます。LOCATION: ロールアウトの種類を作成するロケーション。ROLLOUT_STRATEGY: ロールアウトの種類に応じたロールアウト戦略を定義します。値は次のとおりです。Google.Cloud.Simple.OneLocationAtATime: 一度に 1 つのロケーションを更新します(ソーク時間なし)。最大 5% のユニットを同時に更新します。Google.Cloud.Simple.AllAtOnce: すべてのロケーションが同時に更新を開始します(開発環境や緊急シナリオに最適)。Google.Cloud.Progressive.Gradual.v1: 複数のロケーションにわたって、更新を指数関数的にバッチ処理で段階的にデプロイします(ソーク時間あり)。Google.Cloud.Progressive.SingleLocation.v1: 拡張ソーク時間を使用して、パーセンテージ バッチでユニットを更新し、単一のロケーション内の問題を検出します。
ロールアウト戦略の詳細については、ロールアウト戦略をご覧ください。
ERROR_BUDGET: エラー バジェットの構成。失敗したユニットの数がerror_budgetの最大数(allowed_count、allowed_ratio*total_unitsで定義)を超えると、ロールアウトは一時停止されます。error_budgetが設定されていない場合、App Lifecycle Manager は、発生した失敗の数に関係なく、すべてのユニットの更新を試みます。UNIT_FILTER: ユニットに対して使用される CEL 形式のフィルタ文字列。フィルタが適用され、対象となるユニットの母集団が決定されます。このフィルタでは、ロールアウトの範囲を縮小することしかできません。ロールアウトのスコープを拡張することはできません。UPDATE_UNIT_KIND_DEFAULT: ユニットの種類を更新するための構成。デフォルトでは、ユニットの種類はロールアウトの開始時に更新されます。値は次のとおりです。UPDATE_UNIT_KIND_STRATEGY_UNSPECIFIED: ユニットの種類更新戦略が指定されていません。UPDATE_UNIT_KIND_STRATEGY_ON_START: ロールアウトの開始時にユニットの種類戦略を更新します。UPDATE_UNIT_KIND_STRATEGY_NEVER: ユニットの種類戦略を更新しません。
詳細については、RolloutKind Google Cloud CLI リファレンスをご覧ください。
エラー バジェット機能
App Lifecycle Manager には、安全対策としてエラー バジェット機能(RolloutKind の ErrorBudget)が含まれています。これにより、ユニット更新の失敗数または失敗率(インフラストラクチャの適用中など)が構成されたしきい値を超えた場合に、ロールアウトを自動的に一時停止できます。これにより、更新中の潜在的な問題の影響を制限できます。
ロールアウトの作成
ロールアウトの種類を作成したら、ユニットの更新に使用するリリースを指定するロールアウトを作成できます。
ロールアウトが作成されると、App Lifecycle Manager はユニットの種類で定義された戦略に従ってユニットを更新します。
コンソール
App Lifecycle Manager に移動します。
[ロールアウト] をクリックします。
[ロールアウト リスト] ページで、[作成] をクリックします。
[ロールアウトの作成] ページで、次の操作を行います。
- [ロールアウトの種類] ボックスで、指定したユニットにリリースをデプロイする方法を詳しく説明するロールアウトの種類を選択します。
- [リリース] ボックスで、ユニットの更新に使用するリリースを指定します。
- [ロールアウト名] ボックスに、ロールアウトの名前を入力します。
[作成] をクリックします。
ロールアウトが作成されました。
[グローバル ロールアウトの詳細] ページでは、ロールアウトの状態、ロールアウトの進行状況(ユニット数別)、ロールアウトの失敗など、ロールアウトの詳細をモニタリングできます。
gcloud
Google Cloud コンソールを使用してロールアウトを作成するには:
gcloud app-lifecycle-manager rollouts create ROLLOUT_NAME --rollout-kind=ROLLOUT_KIND_NAME --release=RELEASE_NAME --location=LOCATION
次のように置き換えます。
ROLLOUT_NAME: ロールアウトの名前。ROLLOUT_KIND_NAME: ユニットにリリースを適用するために使用するロールアウトの種類を定義します。リリースは、ロールアウトの種類で定義されたユニットの種類のすべてのユニットに適用されます。RELEASE_NAME: ユニットにデプロイするリリース バイナリを定義します。LOCATION: ロールアウトを作成するロケーション。
詳細については、Rollout Google Cloud CLI リファレンスをご覧ください。
次のステップ
- App Lifecycle Manager の詳細については、App Lifecycle Manager の概要をご覧ください。
- チュートリアルを試すには、App Lifecycle Manager を使用して MySQL インスタンスをデプロイするをご覧ください。
- サービス アカウントの使用方法と、これらのアカウントにきめ細かい権限を付与する方法については、App Lifecycle Manager サービス アカウントをご覧ください。