Terraformには,importコマンドが用意されており,既存のインフラストラクチャをTerraformに読み込めます.
Command: import | Terraform by HashiCorp
Terraformのドキュメントを眺めながら.tfファイルを手入力で作成するのもよいのですが,サービス提供元のWeb UIの方が親切なこともありますので,作成済みのリソースから.tfファイルを作成すれば便利です.
手順
簡単な例として,Google Cloud Platformに作成したgoogle_logging_metric
をインポートしてみましょう.
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_extractor
やlabel_extractors
など謎の設定がたくさん記載されていますが,tfstateを確認すれば,無視して構わないと自信を持って言えます.