terraform plan -generate-config-outの使い方
terraform plan -generate-config-outの使い方
Webコンソールからった作ったALBをterraform管理にしたかった。手順はこんな感じ。
- 生成したいリソース用にimportブロックを書く
- terraform importを実行する
- terraform plan -generate-config-out=generate.tfを実行する
- 1で書いたimportブロックを消す
つまり、Webコンソールで作ったリソースをterraformで管理すると宣言し(手順1)、terraformの管理下に置き(手順2)、tfファイルを生成し(手順3)、実際にtfファイルが作成されたことで不要になった宣言を消す(手順4)。
1. importブロックを書く
terraformのドキュメントに各リソースのimportブロックの書き方が書いてあるので、これをmain.tfに書く。例えば、ALBの例だと以下のように書けと書いてある。
import {
to = aws_lb.bar
id = "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188"
}
このときresouceブロックは書かなくて良い。
terraform plan -generate-config-out
でtoに書いてある名前でresouceブロックが生成される。↑の例だと resouce "aws_lb" "bar" {...}
のようなresouceブロックが生成される。
idは見た目通りarnをAWSのWebコンソールからコピーしてくればよい。
2. terraform importを実行する
↑のimportブロックで書いたarnを指定してterraform import
を実行する。
$ terraform import aws_lb.bar arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188
これでWebコンソールで作成したリソースをterraformに管理下に置かれる。しかし、tfファイル自体は作成されていないので次の手順でtfファイルを生成する。
3. terraform plan -generate-config-out=generate.tfを実行する
generate.tfは好きな名前に変えればよい。例えば、albをterraformで管理したいならalb.tfとかだろうか。
生成されたら好きに編集すれば良い。
4. importブロックを消す
tfファイルが出来てしまえば、もうimportブロックはいらない。1で書いたimportブロックを削除して手順は完了する。
terraform管理下に入れてしまったあとに取り消したい場合
試行錯誤のうちに間違えて管理下に入れてしまうことがあるかも。そういうときはterraform state rm aws_lb.bar
とすれば管理下から外すことができる。
生成されたファイルを修正する
生成されたファイルはsecurity groupとかsubnetの値とかがベタ書きになっているが、当然それらもterraformで管理しているはずなので、生成されたファイルを修正してやる必要がある。しかし、ベタ書きを置き換えていくときに間違うかもしれない。適当に修正したらterraform plan
を叩いて変更がないことを確認しながら作業すると良い。
Discussion