Azure terrafyとは?
既存Azureリソースをterraformで管理下に置くためのツールです。
terraform公式としてはterraform importがありますが、これは事前にリソースを定義した.tfファイルが必要、また、tfstateを作成するだけでterrafyは構成ファイル(.tf)も作成します。
更に、terrafyではResource Group単位でのimportが可能です。(terraform importではRG単位ではできず、リソース1つ1つを指定する必要があります。)
参考:
https://qiita.com/koudaiii/items/10ae59a817abc438b71c
https://azure.github.io/aztfy/#1
Hands-on
Azureへの認証済、Azure CLI、aztfyのインストールは実施済とします。
How to install : https://github.com/Azure/aztfy#install
Terraform構成ファイルが存在していないディレクトリ上でaztfyを実行します。
ほしいリソースに対してEnterを押します。
また、resource名を変更することも可能です。
~/aztfy_test ❯ ls -a
. ..
~/aztfy_test ❯ aztfy resource-group aztfy-resources
Azure Terrafy
aztfy-resources
9 items
|skip…
wでimportを開始します
Azure Terrafy
⣷ Importing /subscriptions/xxxx-xxxx/resourceGroups/aztfy-resources...
...
...
...
...
…
出力を確認してみます。
~/aztfy_test ❯ ls -a
. .. .terraform .terraform.lock.hcl aztfyResourceMapping.json main.aztfy.tf provider.tf terraform.tfstate
このように.tfファイルとtfstateが非常に簡単に作成できます!
terrafyの使いどころ
https://azure.github.io/aztfy/#11 に以下のように書いてあるように、terrafyはconfigurationファイルをfor_each等を使用したり、moduleを使った書き方は目指していないようでした。シンプルなconfigurationファイルでも良いので作成したい、という場合に使うのがよさそうです。
Configuration files do not need to be elegent Modules do not need to be generated
module化した.tfファイルが存在しており、.tfファイルのリソース定義にしたがってtfstateを作成して欲しい、という時には工夫が必要かと思います。
terrafy後、moveブロックを使えばよいかもしれないです。
https://developer.hashicorp.com/terraform/language/modules/develop/refactoring#refactoring
もしくは手間になりますがterraform importを行う方法もあります。
~/aztfy_test ❯ terraform import module.test.azurerm_function_app.func /subscriptions/xxxx-xxxx/resourceGroups/xxxxx……
その他のツール
terrafy以外のimport用ツールも調べてみました。
・terraform add
v1.1の最終リリースで削除されたようです。
リソース間の依存関係を考慮せず1リソースだけ対象にするみたいです。
・Terrafy (Azure terrafyではなくterrafy)
構成ファイル、tfstate両方を作成してくれるが、.tfyというリソースの定義ファイルのようなものを事前に作成する必要があります。
・Terraformer
import後に構成ファイルの微調整が必要になる可能性があるようです。
※Azure terrafyは有効な構成ファイルを作成すること(作成された構成ファイルからのterraform planでの差異が無い、等)としているため、この点は違いになるかと思われます。
Automatically generate the valid Terraform configuration file: