Terraform 1.5がリリースされましたね。このバージョンではcheckブロックとimportブロックというのが追加されています。いまいちどんなものかわからないので公式ドキュメントを見ていきます。
check{}
checkブロックはバリデーションの1つで、planやappley後に実行できるバリデーションのようです。バリデーションというと1.5未満のバージョンでもvariableブロックのvalidationや、resource, data source, outputで記述できるprecondition, postconditionなどがありましたが、これらはそのブロック内でのみ有効でした。checkブロックを使用することで、全体的なバリデーションを行うことができるようになったみたいです。
公式ドキュメントのコードを拝借するとこんな感じ
check "health_check" {
data "http" "terraform_io" {
url = "https://www.terraform.io"
}
assert {
condition = data.http.terraform_io.status_code == 200
error_message = "${data.http.terraform_io.url} returned an unhealthy status code"
}
}
https://www.terraform.ioのレスポンスコードを取得してヘルスチェックしてるみたいですね。
例えば、IaCでデプロイする前後でステータスを取得して健全性を確認する、みたいな時にいいかもしれません。
import{}
元々あったimportコマンドとは別物で、importブロックを記述していくようです。importブロックにはtoとidがあり、toはどのリソースブロックに出力するかというもの、idはインポートしたいリソースのID(IAMユーザーならユーザー名、VPCならvpc_idなど)になります。importブロックを記述した上でterraform plan -generate-config-out=path/to/generated_resources.tfなどとするとgenerated_resources.tfにコードが出力されます。このファイル名はなんでもいいですが、同じファイルがあるとジェネレートできませんでした。
import {
to = aws_instance.example
id = "i-abcd1234"
}
resource "aws_instance" "example" {
name = "hashi"
# (other resource arguments...)
}
countやfor_eachにも対応しているようです。
Import - Configuration Language | Terraform | HashiCorp Developer
ある程度のコードが出力されたら後は plan & error で少しずつ不要なコードを削除していくとよさそうです。
importコマンドとは違ってtfstateは出力されないので、必要に応じてterraform refreshなんかで既存環境のtfstateをジェネレートしておくと、非IaC環境をIaCに移行していけるかもしれません。
まとめ
ドキュメントを読みつつ、ちらっと触ってみた感じimportは便利そうでした。checkは今のところ具体的な使用方法が思いつきません。色々触りつつ模索してみたいと思います。
