Google Cloud リソースを Terraform 状態にインポートする

Terraform は既存のインフラストラクチャをインポートできます。これにより、他の方法で作成したリソースを Terraform の管理下に置くことができます。Google では、Google Cloud リソースを Terraform 状態にインポートして Terraform のデプロイを管理できるようにするためのツールを提供しています。

プロジェクト、フォルダ、組織の状態をインポートできます。

始める前に

Config Connector のコマンドライン インターフェース(CLI)をインストールします。

gcloud components install config-connector

Config Connector を使用すると、Google Cloud の Terraform インポート ツールを使用できます。

リソースの Terraform コードを生成する

gcloud beta resource-config bulk-export コマンドを実行して、プロジェクトの構成全体をパス entire-tf-output に出力します。

gcloud beta resource-config bulk-export \
  --path=entire-tf-output \
  --project=PROJECT_ID \
  --resource-format=terraform

生成されたコードから Terraform モジュールを作成する

出力ディレクトリの内容を指定して gcloud beta resource-config terraform generate-import コマンドを実行します。

gcloud beta resource-config terraform generate-import entire-tf-output

このコマンドにより、Terraform モジュールとインポート スクリプトが生成されます。

  • gcloud-export-modules.tf ファイル。このファイルは、サブリソースのすべてのモジュールを指します。このファイルの内容は次のようになります。

    provider "google" {
    project = "PROJECT_ID"
    }
    
    module "entire-tf-output-projects-PROJECT_ID-ComputeFirewall" {
    source = "./entire-tf-output/projects/PROJECT_ID/ComputeFirewall"
    }
    
    module "entire-tf-output-projects-PROJECT_ID-ComputeBackendService-global" {
    source = "./entire-tf-output/projects/PROJECT_ID/ComputeBackendService/global"
    }
    
    ...and so on
    
  • terraform_import_20220331-19-12-33.sh などの実行可能なシェル スクリプト。シェル スクリプトには terraform import コマンドのリストが含まれます。

    #!/bin/sh
    # Terraform Import Script generated by gcloud cli
    
    terraform import module.entire-tf-output-projects-PROJECT_ID-ComputeFirewall.google_compute_firewall.allow_ssh projects/PROJECT_ID/global/firewalls/allow-ssh
    
    ...and so on
    

    terraform import コマンドは、generate-import コマンドで作成したモジュールを Terraform の状態にインポートするためのものです。

モジュールを Terraform の状態にインポートする

  1. 次のように初期化します。

    terraform init
    
  2. スクリプトを実行します。

    ./terraform_import_20220331-19-12-33.sh
    

    出力:

    module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1:
    Importing from ID
    "projects/PROJECT_ID/zones/us-central1-a/instances/instance-1"...
    module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1:
    Import prepared!
     Prepared google_compute_instance for import
    module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1:
    Refreshing state...
    [id=projects/PROJECT_ID/zones/us-central1-a/instances/instance-1]
    
    Import successful!
    
    The resources that were imported are shown above. These resources are now in
    your Terraform state and will henceforth be managed by Terraform.
    

次のステップ