v1.5から追加されたTerraformのimportブロックの使い方を書きます。
通常の使い方と、-generate-config-outを使った方法の2種類の方法を書きます。
1つめ:通常のimportブロックの使い方
公式ドキュメントはこちらです。
https://developer.hashicorp.com/terraform/language/import
1. importブロックとresourecブロックを用意する
まず、importブロックとresourceブロックを用意します。
今回はコンソールで作成したCloudflare Pagesのプロジェクトをインポートしてみます。
importブロックとresourceブロックはこちら。
import {
to = cloudflare_pages_project.your_resource_block_name
id = "your_account_id/your-project_name"
}
resource "cloudflare_pages_project" "your_resource_block_name" {
# todo
}
toインポート先のリソースブロックを指定します。
idはリソースごとに決まっている指定方法に従って記述します。
今回はcloudflare_pages_projectをインポートするので、こちらのドキュメント通りに<account_id>/<project_name>を記述します。
https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/pages_project#import
2. resourceブロックのrequiredを埋める
resourceブロックのrequiredを埋めないとplan時にエラーが出るので、なんでもいいので埋めます。
最初から分かっているなら正しい値を埋めてもいいですが、時間がかかりそうなら適当でよいと思います。
resource "cloudflare_pages_project" "your_resource_block_name" {
account_id = "hoge"
name = "hoge"
production_branch = "hoge"
}
3. planを実行し、正しい値に修正する
terraform planを実行します。するとインポートしようとするリソースと、現状の定義との差分が出てきます。
いろいろ間違っているとPlan: 1 to import, 1 to add, 0 to change, 1 to destroy.のように表示されるので、これがPlan: 1 to import, 1 to add, 0 to change, 0 to destroy.になるようにresourceブロックを修正します。
4. applyを実行し、importブロックを削除する
terraform applyを実行します。
インポートに成功した後はimportブロックはもう不要なので、削除します。
2つめ: -generate-config-outの使い方
続いて、-generate-config-outオプションを使う場合の方法を書いていきます。
このオプションをつけると、現在のクラウド上のリソースの定義を別ファイルに自動で落とし込むことができます。ようはresourceブロックが出来上がった状態を自動で書きだしてくれます。
1. importブロックを用意する
先ほどと同じようにimportブロックを用意します。
resourceブロックは必要ありません。
2. planを実行する
続いてplanを実行するのですが、この時にオプションをつけて以下のように実行します。
terraform plan -generate-config-out hoge.tf
hoge.tfの部分にはまだ存在しないファイル名を書く必要があります。
これを実行すると中にインポートしたリソースの定義が入った状態でhoge.tfが生成されます。
3. applyを実行する
問題なければterraform applyを実行します。
実行後、importブロックを削除します。
リソースの場所が気になる場合はコピペして移動させましょう。
終わりに
terraformのimportブロックの使い方を書きました。
importコマンドとは違い宣言的に書けるのがいい点ですね。
-generate-config-outオプションを使うと、クラウド上のリソースの定義がまるまる記述された状態で書き出されるので便利でした。