デプロイされたリソースを Infrastructure Manager にインポートする


このチュートリアルでは、 Google Cloud リソースを Infrastructure Manager デプロイにインポートする方法について説明します。インポートできるのは、Terraform を使用してプロビジョニングされたリソースのみです。

Terraform 構成があり、Google Cloudにまだデプロイしていない場合は、Infrastructure Manager を使用してインフラストラクチャをデプロイするをご覧ください。

このチュートリアルでは、Terraform CLI を使用してGoogle Cloud に Virtual Private Cloud(VPC)をデプロイします。このチュートリアルでは、デプロイされたリソースを Infrastructure Manager にインポートして、リソースを Infrastructure Manager デプロイとして管理できるようにします。

このチュートリアルの例を使用して、他のGoogle Cloud リソースを Infra Manager にインポートする方法を確認できます。デプロイメントを Infra Manager にインポートするには、リソースのプロビジョニングに使用される Terraform 構成が制約に準拠している必要があります。また、リソースはサポートされている Terraform バージョンを使用してプロビジョニングされている必要があります。

料金

このチュートリアルでは、 Google Cloudの次の課金対象コンポーネントを使用します。

始める前に

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Infrastructure Manager API:

    gcloud services enable config.googleapis.com
  7. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/config.agent IAM role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  11. Make sure that billing is enabled for your Google Cloud project.

  12. Enable the Infrastructure Manager API:

    gcloud services enable config.googleapis.com
  13. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/config.agent IAM role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  14. 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 を使用してリソースをデプロイする

  1. 次の 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
    
  2. 次のコマンドを使用して、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 リポジトリ、またはローカルマシンに保存できます。

  1. 空の 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 ..
    
  2. 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 状態ファイルを Infrastructure 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 にデプロイされたリソースが同期されていることを確認します。

  1. 次のコマンドを使用してプレビューを作成します。

    gcloud infra-manager previews create projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview \
    --gcs-source gs://import-deployment-configuration \
    --input-values project_id=PROJECT_ID \
    --deployment projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
    --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    
  2. プレビューの詳細を取得して、プレビューが正常に完了したことを確認します。

    gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview
    
  3. プレビューをエクスポートして変更を確認します。

    SIGNED_BIN_PLAN_URL=$(gcloud infra-manager previews export projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview --format "get(result.binarySignedUri)")
    curl -X GET --output tfplan.out $SIGNED_BIN_PLAN_URL
    
  4. 次のコマンドを使用して、構成がローカルに存在し、初期化されていることを確認します。

    terraform init
    
  5. Terraform show を実行して、Infrastructure Manager のデプロイ状態と構成の変更を確認します。

    terraform show tfplan.out
    

Google Cloud の VPC リソースと状態ファイルが同期されている場合、terraform show は、Infrastructure Manager がデプロイ状態と構成の間で変更を検出していないことを確認する次の出力を生成します。次のような出力が表示されます。

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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトを削除する

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

リソースを個別に削除する

VPC とデプロイに関するメタデータを削除します。

gcloud infra-manager deployments delete projects/PROJECT_ID/locations/us-central1/deployments/quickstart-deployment

次のステップ