-
参考サイト
-
【Terraform】既存S3の取り込みで実施した既存リソースのインポートがだいぶ面倒に感じた
- importで取り込めるのはtfstateファイルで、人が扱うtfファイルへの反映は手作業で実施しないといけない
-
Terraformのv1.5.0で上記手動の反映ではなく、tfファイルに直接取り込めるオプションが追加されたので、触ってみる
- https://developer.hashicorp.com/terraform/language/import
- まだ実験的なリリース機能です
実施手順
- ①作業ディレクトリの作成
- ②構成ファイル(main.tf)の作成
- ③初期化(terraform init)
- ④tfファイルの生成(terraform plan)
- ⑤apply
①作業ディレクトリの作成
- Terraform実行時に複数のファイルが作成される
- Terraform実行ディレクトリとしてディレクトリを用意する
- 名前はなんでも良い
- 今回は
terraform-s3-importblock
とした
- 今回は
②構成ファイル(main.tf)の作成
- 今回の構成ファイルは下記のように記述
import {
to = aws_s3_bucket.tf-importblock
id = "【バケット名】"
}
to
aws_s3_bucket
→ リソースの種類。今回はS3バケットtf-importblock
→ tfファイル内の定義名。任意の名前でOK- この定義名がこの後生成するリソース定義名になる
id
→ 取り込みたいリソース名。今回はS3バケット名を設定する- 実際に取得したいリソース名と一致させる必要がある
③初期化(terraform init)
Terraform has been successfully initialized!
と表示されたらOK
④tfファイルの生成(terraform plan)
plan
コマンドを実行する。実行時に以下オプションで実行。
terraform plan -generate-config-out=generated.tf
- 実行後に
generated.tf
が生成されている(以下内容)
# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.
# __generated__ by Terraform from "【バケット名】"
resource "aws_s3_bucket" "tf-importblock" {
bucket = "【バケット名】"
bucket_prefix = null
force_destroy = null
object_lock_enabled = false
tags = {}
tags_all = {}
}
⑤apply
apply
コマンドを実行
terraform apply
No changes.
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
と出力されたらOK- 差分なしでapplyされている
感想
- 手作業での取り込みが発生しない分便利だなと感じた
- ただ、トントン拍子に処理を進められてしまうので、実際に使用する時は1ステップずつ、慎重に確認しながら進めた方が良さそう?
コメント