プレビュー結果をエクスポートして表示する

このページでは、プレビューの結果をエクスポートして確認する方法について説明します。プレビューには、特定の Terraform 構成をアクチュエートするアクションが記述されています。新しいデプロイを作成する前、またはデプロイを更新する前に、デプロイをプレビューして、変更が予定されている内容を確認できます。

表示するプレビューをまだ作成していない場合は、デプロイのプレビューをご覧ください。

このページは、Terraform に精通していることを前提としています。詳細については、Terraform と Infrastructure Manager をご覧ください。

始める前に

  1. Infra Manager を有効にします
  2. プレビューをエクスポートするために必要な IAM 権限(roles/config.admin)があることを確認します。
  3. プレビュー デプロイを作成します。

プレビューの結果をエクスポートする

プレビューの結果を確認するには、まず結果をエクスポートします。次に、適切なツールを使用して、エクスポートされた結果を表示します。

プレビューをエクスポートするには、その状態が SUCCEEDED または STALE である必要があります。describe コマンドまたは list コマンドを使用すると、プレビューの現在の状態を表示できます。

次のコマンドを使用して、プレビューの結果をエクスポートし、ローカルに保存します。

gcloud infra-manager previews export projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID

次のように置き換えます。

  • PROJECT_ID: Infrastructure Manager が実行されるプロジェクト ID。
  • LOCATION: Infra Manager が実行されるロケーション。有効なロケーションの一覧については、Infrastructure Manager のロケーションをご覧ください。
  • PREVIEW_ID: 指定したプレビュー識別子。プレビュー識別子の制約の詳細については、プレビュー名をご覧ください。

プレビューの結果を表示する

結果は、バイナリ プランファイルJSON 表現の 2 つの形式でエクスポートされます。どちらの形式でも結果を確認できます。結果を表示するには、形式に適したツールを使用します。

バイナリ プラン ファイルを確認する

バイナリ プラン ファイルを表示するには:

  1. Terraform CLI がインストールされていることを確認します。

  2. プレビューの作成に使用した Terraform 構成がローカルに存在し、terraform init で初期化されていることを確認します。

  3. terraform show を使用して、提案されたプランを出力します。

JSON 表現を確認する

JSON 表現を表示するには、IDE または jq などのツールを使用します。

ポリシー制約を適用するには、Terraform vet などのツールで JSON 表現を使用します。

リソースの変更とドリフトの詳細を表示する

プレビューを使用して、デプロイのリソース ドリフトを表示できます。デプロイの構成の変更が意図したものであることを確認し、特定のプレビューでデプロイが更新されたときにデプロイがどのように変更されるかを要約するには、デプロイのリソース ドリフトを確認すると便利です。

プレビューを作成するときに、Infra Manager API を使用して、デプロイを更新する際にリソースの変更を確認します。

リソースのドリフトを表示する

リソースのドリフトを表示するには、ListResourceDrifts を呼び出します。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts"

次のように置き換えます。

  • PROJECT_ID: プレビュー デプロイが配置されている Google Cloud プロジェクトの ID。
  • LOCATION: プレビュー デプロイのリージョンまたはゾーン。
  • PREVIEW_ID: プレビュー デプロイの ID。

結果は次のようになります。

{
    "resourceDrifts": [
        {
            "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts/RESOURCE_DRIFT_ID",
            "terraformInfo": {
                "address": "google_resource_type.resource_name",
                "type": "google_resource_type",
                "resourceName": "resource_name",
                "provider": "registry.terraform.io/hashicorp/google"
            },
            "propertyDrifts": [
                {
                    "path": "$.json_path_to_property_field",
                    "before": "config-defined-state",
                    "after": "remote-state"
                }
            ]
        }
    ]
}

ドリフトの詳細を表示する

ドリフトの詳細を表示するには、GetResourceDrift を呼び出します。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts/RESOURCE_DRIFT_ID"

次のように置き換えます。

  • PROJECT_ID: プレビュー デプロイが配置されている Google Cloud プロジェクトの ID。
  • LOCATION: プレビュー デプロイのリージョンまたはゾーン。
  • PREVIEW_ID: プレビュー デプロイの ID。
  • RESOURCE_DRIFT_ID: ドリフトの識別子。

結果は次のようになります。

{
    "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts/RESOURCE_DRIFT_ID",
    "terraformInfo": {
        "address": "google_resource_type.resource_name",
        "type": "google_resource_type",
        "resourceName": "resource_name",
        "provider": "registry.terraform.io/hashicorp/google"
    },
    "propertyDrifts": [
        {
            "path": "$.json_path_to_property_field",
            "before": "config-defined-state",
            "after": "remote-state"
        }
    ]
}

リソースの変更をプレビューする

プレビューを使用すると、プレビューからデプロイを更新した場合にリソースがどのように変化するかを確認できます。

リソースの変更を表示する

プレビュー デプロイがリソースに与える影響を確認するには、ListResourceChanges を呼び出します。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges"

次のように置き換えます。

  • PROJECT_ID: プレビュー デプロイが配置されている Google Cloud プロジェクトの ID。
  • LOCATION: プレビュー デプロイのリージョンまたはゾーン。
  • PREVIEW_ID: プレビュー デプロイの ID。
  • RESOURCE_CHANGE_ID: リソース変更の識別子。

結果は次のようになります。

{
    "resourceChanges": [
        {
            "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges/RESOURCE_CHANGE_ID",
            "terraformInfo": {
                "address": "google_resource_type.resource_name",
                "type": "google_resource_type",
                "resourceName": "resource_name",
                "provider": "registry.terraform.io/hashicorp/google",
                "actions": [
                    "update"
                ]
            },
            "intent": "UPDATE",
            "propertyChanges": [
                {
                    "path": "$.json_path_to_property_field1",
                    "before": "true"
                },
                {
                    "path": "$.json_path_to_property_field2",
                    "before": "old value",
                    "after": "new value"
                }
            ]
        }
    ]
}

リソースの変更の詳細を表示する

リソースの変更の詳細を表示するには、GetResourceChange を呼び出します。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges/RESOURCE_CHANGE_ID"

次のように置き換えます。

  • PROJECT_ID: プレビュー デプロイが配置されている Google Cloud プロジェクトの ID。
  • LOCATION: プレビュー デプロイのリージョンまたはゾーン。
  • PREVIEW_ID: プレビュー デプロイの ID。
  • RESOURCE_CHANGE_ID: リソース変更の識別子。

結果は次のようになります。

{
    "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges/RESOURCE_CHANGE_ID",
    "terraformInfo": {
        "address": "google_resource_type.resource_name",
        "type": "google_resource_type",
        "resourceName": "resource_name",
        "provider": "registry.terraform.io/hashicorp/google",
        "actions": [
            "update"
        ]
    },
    "intent": "UPDATE",
    "propertyChanges": [
        {
            "path": "$.json_path_to_property_field1",
            "before": "true"
        },
        {
            "path": "$.json_path_to_property_field2",
            "before": "old value",
            "after": "new value"
        }
    ]
}

次のステップ