このガイドでは、App Lifecycle Manager テナントを使用してデプロイされたユニットを整理する方法と、リソースを個別のテナント プロジェクトにデプロイしてリソースを分離および管理する方法について説明します。
テナントとテナント プロジェクトの概要については、テナントとテナント プロジェクトをご覧ください。
始める前に
テナント プロジェクトまたはリソースを作成する前に:
- Terraform 構成と Artifact Registry リポジトリを作成し、プロデューサー プロジェクトに SaaS アプリケーションを含むアーティファクトを作成します。SaaS サービスの設定方法については、App Lifecycle Manager を使用してサービス インスタンスをデプロイするをご覧ください。
App Lifecycle Manager で必要な API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。プロデューサー プロジェクト内で必要なサービス アカウントと Identity and Access Management ロールが付与されていることを確認します。これには、ユーザーが作成したサービス アカウントと、プロデューサー プロジェクトの
service-PROJECT-NUMBER@gcp-sa-saasservicemgmt.iam.gserviceaccount.comアカウントに付与された権限が含まれます。
テナント プロジェクトを設定する
テナントのリソースを個別のプロジェクトにプロビジョニングすると、リソース、IAM ポリシー、割り当て、ネットワーク構成がテナントごとに分離されるため、1 つのテナントの違反や構成ミスが他のテナントに影響する可能性が低くなります。
必要なもの:
- 1 つのプロデューサー プロジェクト。
テナントごとに 1 つのテナント プロジェクト。
コンソール
Google Cloud コンソールを使用してテナント プロジェクトとプロデューサー プロジェクトを設定するには:
- プロデューサー プロジェクトと、テナントごとにテナント プロジェクトを作成します。
- テナント プロジェクトとプロデューサー プロジェクトで課金を有効にします。
テナント プロジェクトで App Lifecycle Manager に必要な API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。テナント プロジェクトに、必要な権限を持つアクチュエーション サービス アカウントがあることを確認します。
詳細については、App Lifecycle Manager サービス アカウントをご覧ください。
テナント プロジェクトとプロデューサー プロジェクトの設定が完了しました。プロデューサー プロジェクトとテナント プロジェクトの課金を作成して有効にすると、テナント リソースを作成して、ユニットをテナントに関連付けることができます。
gcloud
Google Cloud CLI を使用してプロデューサー プロジェクトとテナント プロジェクトを設定するには:
プロデューサー プロジェクトと、テナントごとにテナント プロジェクトを作成します。
gcloud projects create PRODUCER_PROJECT_ID --name="SaaS producer project" [--folder=folder-id] gcloud projects create TENANT_PROJECT_ID --name="SaaS tenant A project" [--folder=folder-id]次のように置き換えます。
PRODUCER_PROJECT_ID: プロデューサー プロジェクト ID を表す文字列識別子。TENANT_PROJECT_ID: テナント プロジェクト ID を表す文字列識別子。
テナント プロジェクトとプロデューサー プロジェクトの課金を有効にします。
gcloud beta billing projects link PRODUCER_PROJECT_ID --billing-account=BILLING_ACCOUNT_ID gcloud beta billing projects link TENANT_PROJECT_ID --billing-account=BILLING_ACCOUNT_ID次のように置き換えます。
PRODUCER_PROJECT_ID: プロデューサー プロジェクト ID を表す文字列識別子。TENANT_PROJECT_ID: テナント プロジェクト ID を表す文字列識別子。BILLING_ACCOUNT_ID: 指定したプロジェクトに関連付ける請求先アカウントの ID。
各テナント プロジェクトに必要な Identity and Access Management ロールをアクチュエーション サービス アカウントに付与します。
gcloud projects add-iam-policy-binding TENANT_PROJECT_ID \ --member='serviceAccount:SERVICE_ACCOUNT@PRODUCER_PROJECT_ID.iam.gserviceaccount.com' \ --role=ROLE次のように置き換えます。
TENANT_PROJECT_ID: テナント プロジェクト ID を表す文字列識別子。PRODUCER_PROJECT_ID: プロデューサー プロジェクト ID を表す文字列識別子。SERVICE_ACCOUNT: 指定されたプロジェクト内でロールを付与するサービス アカウント。ROLE: 付与する Identity and Access Management ロール。指定したサービス アカウントに付与するロールごとに
gcloud projects add-iam-policy-bindingを実行する必要があります(--role='roles/compute.admin'など)。
テナント プロジェクトとプロデューサー プロジェクトの設定が完了しました。プロデューサー プロジェクトとテナント プロジェクトの課金を作成して有効にすると、テナント リソースを作成して、ユニットをテナントに関連付けることができます。
テナント リソースを作成する
SaaS サービスにテナント リソースを作成して、顧客を表します。
Google Cloud コンソールで、[App Lifecycle Manager] > [テナント] に移動します。
[作成] をクリックします。
[テナント名] ボックスに、テナント リソースの名前を入力します。
省略可: [顧客リソース] ボックスに、統合用のコンシューマー定義の設定を含むコンシューマー リソースを指定します。
[SaaS サービス] ボックスで、テナントに関連付ける SaaS サービスを選択します。
[リージョン] プルダウンで、テナント メタデータが保存されるリージョンを選択します。
省略可: [ラベルを追加] をクリックして、Key-Value ペアのラベルをテナントに追加します。
[作成] をクリックしてテナント リソースを作成します。
テナント リソースが正常に作成されました。
ユニットをテナントに関連付ける
テナントを作成してユニットをデプロイしたら、それらをリンクできます。この関連付けは、主にどのユニットがどのテナントに属しているかを整理するのに役立つ組織タグとして機能します。
ユニットのデプロイの詳細については、App Lifecycle Manager を使用して MySQL インスタンスをデプロイするをご覧ください。
ユニットをテナントに関連付けるには:
Google Cloud コンソールで、[App Lifecycle Manager] > [テナント] に移動します。
ユニットに関連付けるテナントの名前をクリックします。
[編集] をクリックします。
[関連付けられたユニット] セクションで、[ユニットを追加] をクリックします。
このテナントに関連付けるユニットを選択します。
[完了] をクリックします。
[保存] をクリックします。
選択したユニットが、指定したテナントに関連付けられます。
テナント プロジェクト変数を使用して新しいユニットをプロビジョニングする
テナントに関連付けられたユニットをプロビジョニングする場合は、tenant_project_id 変数を指定する必要があります。
Google Cloud コンソールで、[App Lifecycle Manager] > [Units] に移動します。
ユニットの種類に関連付けられた新しいユニットを作成します。
[PROVISION] をクリックします。
[リリース] を選択して、テナント ユニットにプロビジョニングします。
テナント プロジェクトで権限を付与したアクチュエーション サービス アカウントを選択します。最小権限の原則に従い、管理対象のリソースに必要なロールのみを付与する必要があります。
[入力変数] セクションで、次の操作を行います。
- Terraform 構成の
variables.tfファイルで定義したとおりにtenant_project_id変数がリストされていることを確認します。 - [テナント プロジェクト ID] ボックスに、テナント プロジェクトの名前を指定します。
- Terraform 構成で定義された入力変数を指定します。Terraform 構成で他の変数を定義していない場合は、この手順をスキップします。
- Terraform 構成の
[PROVISION] をクリックします。
App Lifecycle Manager は、指定された動作用のサービス アカウントを使用して Infrastructure Manager をトリガーします。Infrastructure Manager は tenant_project_id 変数を読み取り、そのテナント プロジェクト内に VM を作成します。
新しいリリースでユニットを再プロビジョニングする
新しいリリースで既存のユニットを再プロビジョニングする場合は、tenant_project_id 変数を指定する必要があります。
Google Cloud コンソールで、[App Lifecycle Manager] > [Units] に移動します。
ユニットの種類に関連付けられているユニットを選択します。
[Edit Provisioning] をクリックします。
更新された Terraform 構成で作成した [リリース] を選択します。
テナント プロジェクトで権限を付与したアクチュエーション サービス アカウントを選択します。最小権限の原則に従い、管理対象のリソースに必要なロールのみを付与する必要があります。
[入力変数] セクションで、次の操作を行います。
- Terraform 構成の
variables.tfファイルで定義したとおりにtenant_project_id変数がリストされていることを確認します。 - [テナント プロジェクト ID] ボックスに、テナント プロジェクトの名前を指定します。
- Terraform 構成で定義された入力変数を指定します。Terraform 構成で他の変数を定義していない場合は、この手順をスキップします。
- Terraform 構成の
[更新] をクリックします。
App Lifecycle Manager は、指定された動作用のサービス アカウントを使用して Infrastructure Manager をトリガーします。Infrastructure Manager は tenant_project_id 変数を読み取り、そのテナント プロジェクト内に VM を作成します。
次のステップ
- ユニット間の依存関係の管理について学習する。
- 詳しくは、変数と変数マッピングの使用をご覧ください。
- サービス アカウントに必要な権限を確認します。