みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

terraform importで簡単にtfファイルを作成する

Terraformには,importコマンドが用意されており,既存のインフラストラクチャをTerraformに読み込めます.

Command: import | Terraform by HashiCorp

Terraformのドキュメントを眺めながら.tfファイルを手入力で作成するのもよいのですが,サービス提供元のWeb UIの方が親切なこともありますので,作成済みのリソースから.tfファイルを作成すれば便利です.

手順

簡単な例として,Google Cloud Platformに作成したgoogle_logging_metricをインポートしてみましょう.

Terraform Registry

terraformをインストールし,gcloudの認証を済ませ,専用のディレクトリを用意し,以下のファイルを作成します.

main.tf

provider "google" {
  project = "<project name>"
}

このディレクトリに対して,terraform initを実行してterraformを初期化します.

それでは,google_logging_metric.testをインポートしてみましょう.main.tfに宣言を追加します.

main.tf

resource "google_logging_metric" "test" {
}

これで,terraform import google_logging_metric.test testと実行すれば,内容がtfstateに反映されます.

terraform.tfstate

{
  "version": 4,
  "terraform_version": "1.2.5",
  "serial": 1,
  "lineage": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx",
  "outputs": {},
  "resources": [
    {
      "mode": "managed",
      "type": "google_logging_metric",
      "name": "test",
      "provider": "provider[\"registry.terraform.io/hashicorp/google\"]",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "bucket_options": [],
            "description": "",
            "filter": "resource.type = \"cloud_run_revision\"",
            "id": "test",
            "label_extractors": {},
            "metric_descriptor": [
              {
                "display_name": "",
                "labels": [],
                "metric_kind": "DELTA",
                "unit": "1",
                "value_type": "INT64"
              }
            ],
            "name": "test",
            "project": "<project name>",
            "timeouts": {
              "create": null,
              "delete": null,
              "update": null
            },
            "value_extractor": ""
          },
          "sensitive_attributes": [],
          "private": "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
        }
      ]
    }
  ]
}

この情報と,terraformのドキュメントを見比べながら,tfファイルを作成します.例えばこのようになります.

resource "google_logging_metric" "test" {
  name   = "test"
  filter = "resource.type = \"cloud_run_revision\""
  metric_descriptor {
    metric_kind  = "DELTA"
    value_type   = "INT64"
    unit         = "1"
    display_name = "test"
  }
}

terraformのドキュメントには,value_extractorlabel_extractorsなど謎の設定がたくさん記載されていますが,tfstateを確認すれば,無視して構わないと自信を持って言えます.