このチュートリアルでは、 Google Cloud リソースを Infrastructure Manager デプロイにインポートする方法について説明します。インポートできるのは、Terraform を使用してプロビジョニングされたリソースのみです。
Terraform 構成があり、 まだ Google Cloudデプロイしていない場合は、 Infrastructure Manager を使用してインフラストラクチャをデプロイするをご覧ください。
このチュートリアルでは、まず Terraform CLI を使用して Virtual Private Cloud(VPC)を Google Cloud にデプロイします。次に、デプロイされたこれらのリソースを Infrastructure Manager にインポートして、リソースを Infrastructure Manager デプロイとして管理する方法について説明します。
このチュートリアルの例を使用して、他の Google Cloud リソースを Infra Manager にインポートする方法を理解できます。デプロイを Infra Manager にインポートするには、リソースの プロビジョニングに使用する Terraform 構成が 制約に準拠している必要があり、 サポートされている Terraform バージョンを使用して リソースをプロビジョニングする必要があります。
費用
このチュートリアルでは、課金対象である次の コンポーネントを使用します Google Cloud。
始める前に
-
ログイン Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、 新しいアカウントを登録します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。ロールを付与する方法を確認する。
-
プロジェクトを作成します。 Google Cloud
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Infrastructure Manager API を有効にします。
API を有効にするために必要なロール
API を有効にするには、 権限を含む Service Usage 管理者 IAM ロール(
roles/serviceusage.serviceUsageAdmin)が必要です。serviceusage.services.enableロールを付与する方法を確認する。gcloud services enable config.googleapis.com
-
認証を設定します。
-
サービス アカウント作成者 IAM ロール
(
roles/iam.serviceAccountCreator)とプロジェクト IAM 管理者ロール (roles/resourcemanager.projectIamAdmin)があることを確認します。ロールを付与する方法を確認する。 -
サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 -
サービス アカウントに
roles/config.agentIAM ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent
以下を置き換えます。
SERVICE_ACCOUNT_NAME: サービス アカウントの名前PROJECT_ID: サービス アカウントを作成したプロジェクト ID
-
サービス アカウント作成者 IAM ロール
(
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。ロールを付与する方法を確認する。
-
プロジェクトを作成します。 Google Cloud
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Infrastructure Manager API を有効にします。
API を有効にするために必要なロール
API を有効にするには、 権限を含む Service Usage 管理者 IAM ロール(
roles/serviceusage.serviceUsageAdmin)が必要です。serviceusage.services.enableロールを付与する方法を確認する。gcloud services enable config.googleapis.com
-
認証を設定します。
-
サービス アカウント作成者 IAM ロール
(
roles/iam.serviceAccountCreator)とプロジェクト IAM 管理者ロール (roles/resourcemanager.projectIamAdmin)があることを確認します。ロールを付与する方法を確認する。 -
サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 -
サービス アカウントに
roles/config.agentIAM ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent
以下を置き換えます。
SERVICE_ACCOUNT_NAME: サービス アカウントの名前PROJECT_ID: サービス アカウントを作成したプロジェクト ID
-
サービス アカウント作成者 IAM ロール
(
- サポートされているバージョンの Terraform をインストールします。
にリソースをデプロイする Google Cloud
このチュートリアルでデプロイする Google Cloud リソースは VPC です。このセクションでは、デプロイされたリソースを Infra Manager にインポートする例として使用する リソースをデプロイする方法について説明します。
このチュートリアルでは、us-central1 リージョンを使用します。別のリージョンを使用する場合は、Infra Manager が実行される任意のロケーションを使用できます。有効なロケーションのリストについては、
Infrastructure Manager のロケーション
をご覧ください。
構成内のリソースの権限を付与する
Infra Manager を実行するために必要な権限は付与されていますが、デプロイする構成で説明されているリソースに固有の権限も付与する必要があります。
Terraform 構成で定義されているリソースである VPC ネットワークを作成できるように権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
--role=roles/compute.networkAdmin
以下を置き換えます。
- SERVICE_ACCOUNT_NAME: サービス アカウントの名前。
- PROJECT_ID: プロジェクト ID。
Terraform CLI を使用してリソースをデプロイする
次の Terraform 構成を使用して VPC ネットワークを作成します。これを行うには、次のコマンドを実行します。
mkdir vpc_to_import cd vpc_to_import cat <<EOF > main.tf variable "project_id" { type = string } resource "google_compute_network" "vpc_network" { name = "my-custom-mode-network" project = var.project_id } EOF次のコマンドを使用して、Terraform CLI を使用して構成をデプロイします。
terraform init echo "************** TERRAFORM APPLY ******************" terraform apply -var="project_id=PROJECT_ID" -auto-approve cd ..
VPC がプロビジョニングされると、Creation complete というテキストで始まる出力が表示されます。
Terraform 構成で定義されている VPC が
にデプロイされました Google Cloud。Terraform は状態ファイルを作成します。このファイルは main.tf ファイルの横のファイル システムにあります。
Infrastructure Manager にプレースホルダ デプロイを作成する
リソースを Infra Manager にインポートするには、Infra Manager に既存のデプロイが必要です。
このチュートリアルでは、ストレージ バケットを使用して Terraform 構成を保存します。このチュートリアルを使用して他のデプロイを Infra Manager にインポートする方法を理解する場合は、Terraform 構成をストレージ バケット、公開 Git リポジトリ、またはローカルマシンに保存できます。
空の Terraform 構成をストレージ バケットに追加します。
gcloud storage buckets create gs://import-deployment-configuration --project=PROJECT_ID mkdir placeholder_deployment cd placeholder_deployment cat <<EOF > main.tf EOF gcloud storage cp main.tf gs://import-deployment-configuration cd ..Infra Manager を使用してデプロイを作成します。
gcloud infra-manager deployments apply projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \ --gcs-source gs://import-deployment-configuration \ --input-values project_id=PROJECT_ID \ --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNTデプロイが完了すると、次のように表示されます。
Creating the deployment...done
これで、Infra Manager デプロイが作成されました。次に、このデプロイで VPC を管理できるように、状態ファイルと Terraform 構成をこのデプロイに追加する必要があります。
状態ファイルと Terraform 構成をインポートする
Infra Manager を使用してデプロイされたリソース(VPC)を管理するには、状態ファイルと Terraform 構成を Infra Manager に追加する必要があります。
デプロイメントをロックする
状態を変更できるように、Infra Manager デプロイをロックします。
LOCK_ID=$(gcloud infra-manager deployments lock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --format="get(lockId)")
Terraform 状態ファイルを Infra Manager にインポートする
デプロイされたリソースの状態ファイルをインポートします。この状態ファイルは、Terraform CLI を使用して VPC をデプロイしたときに Terraform によって作成されました。
Terraform 状態ファイルを Infra Manager デプロイにアップロードします。
SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --lock-id ${LOCK_ID} --format="get(signedUri)")
cd vpc_to_import
curl -s -X PUT --upload-file terraform.tfstate $SIGNED_STATE_UPLOAD_URL
Terraform 構成を Cloud Storage バケットにアップロードする
Terraform 状態ファイルをアップロードしたので、VPC ネットワークの作成に使用した Terraform 構成もアップロードする必要があります。 Infra Manager プレビューを実行したときに、リソースの変更が検出されないように、Infra Manager には Terraform 状態ファイルが必要です。
次のコマンドを使用して、Terraform 構成を Cloud Storage にアップロードします。
gcloud storage cp main.tf gs://import-deployment-configuration
デプロイメントのロックを解除する
このチュートリアルを使用してリソースを Infra Manager にインポートする方法を理解する場合は、状態ファイルと Terraform 構成に違いがないことを確認してください。状態ファイルと Terraform 構成に違いがある場合は、状態ファイルにデプロイするリソースが記述されていることを確認してください。デプロイのロックを解除すると、状態ファイルと Terraform 構成に違いがある場合、デプロイのロックを解除すると、Infra Manager は状態ファイルに合わせてリソースを作成または削除します。
Infra Manager を使用してリソースを管理するには、デプロイのロックを解除する必要があります。このチュートリアルでは、状態ファイルと Terraform 構成で同じ構成が記述されているため、Infra Manager はリソースを作成または削除しません。
次のコマンドを実行して、デプロイのロックを解除します。
gcloud infra-manager deployments unlock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
--project PROJECT_ID \
--location us-central1 \
--lock-id ${LOCK_ID}
状態ファイルと Terraform 構成が Infra Manager デプロイに追加されたので、デプロイされたリソースのインポートが完了しました。デプロイされた VPC は、Infra Manager によって管理されるようになりました。
リソースの変更をプレビューする
デプロイでプレビューを実行して、Terraform の状態と Google Cloud にデプロイされたリソースが同期していることを確認します。
次のコマンドを使用してプレビューを作成します。
gcloud infra-manager previews create projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME \ --gcs-source gs://import-deployment-configuration \ --deployment projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \ --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --location us-central1プレビューの詳細を取得して、正常に完了したことを確認します。
gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAMEプレビューをエクスポートして変更を確認します。
SIGNED_BIN_PLAN_URL=$(gcloud infra-manager previews export projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME --format "get(result.binarySignedUri)") curl -X GET --output tfplan.out $SIGNED_BIN_PLAN_URL構成がローカルに存在し、次のコマンドで初期化されていることを確認します。
terraform initTerraform show を実行して、Infrastructure Manager デプロイの状態と構成の変更を確認します。
terraform show tfplan.out
の VPC リソースと状態ファイルが
同期している場合、terraform show は次の出力を生成し、Infrastructure Manager がデプロイの状態と構成の間に変更がないことを確認します。 Google Cloud 次のような出力が表示されます。
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
これで、デプロイされたリソースがインポートされ、Infra Manager で管理されるようになりました。たとえば、Infra Manager を使用して デプロイを更新できます。
デプロイを更新して、デプロイが Infra Manager に正常にインポートされたことを 確認 することもできます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
プロジェクトを削除します。 Google Cloud
gcloud projects delete PROJECT_ID
リソースを個別に削除する
VPC とデプロイに関するメタデータを削除します。
gcloud infra-manager deployments delete projects/PROJECT_ID/locations/us-central1/deployments/quickstart-deployment