はじめに
Azure リソースから Terraform の tf ファイル、tfstate ファイルを生成するツールがあることを知ったので、試してみました。
目次
Azure Export for Terraform
名前のとおり、Terraform のファイルとして Azure リソースのエクスポートが可能なツールです。
エクスポート対象の指定には、以下の 3 つの方法があります。
- 単体のリソース (リソース ID) を指定
- リソース グループを指定
- Azure Resource Graph を使用した指定
インストール
事前に、Azure CLI と Terraform のインストールが必要です。
MSI や Package Manager など、方法はこちらにまとまっています。
エクスポート
以下のクイックスタートを参考に、各指定方法でエクスポート、 terraform plan まで実行してみます。
単体リソースの指定
エクスポート先の空ディレクトリを作成しておき、コマンド プロンプトでそのディレクトリに移動します。
※既存の状態ファイルへ追加する --append オプションなどもありますが、ここではすべて新規ディレクトリで試しています。
Azure ポータルにて、エクスポート対象リソースのリソース ID をコピーしておきます。
今回は適当な VNet を使います。
az login コマンドにてログイン後、以下のエクスポートコマンドを実行します。
aztfexport resource <リソース ID>
エクスポート対象のリソースと対応する Terraform リソースの種類が表示されるため、対象に誤りがなければ w キーを押します。
エクスポートが始まります。
この画面になったら完了です。
ディレクトリには、tf ファイルや tfstate ファイルがエクスポートされています。
確認で以下のコマンドを実行します。
terraform init --upgrade terraform plan
No changes なのでこれでエクスポート完了です。
リソース グループの指定
別のディレクトリを作成し、リソース グループでのエクスポートを指定してみます。
以下のエクスポート コマンドを実行します。
aztfexport resource-group <リソース グループ名>
そのままだと、リソース グループ内のリソースすべてが対象になります。
十字キーで選択し Delete キーを押すことで、各リソース毎にエクスポートに含めるかどうか (skip 対象かどうか) を個別指定できます。
すべて対象とは書きましたが、一部、エクスポートできないリソースが含まれる場合には自動で Skip になっていました。 (Log Analytics ワークスペースのテーブルとか)
下の方に行くとスキップがたくさんあります
エクスポート中はかわいいアイコンが出てきます。
対象が多いためか少し時間はかかりました。10 分くらい?
エクスポートが完了したら以下のコマンドを実行します。
terraform init --upgrade terraform plan
こちらはエラーがありました。 VM のパスワードに当たる変数に指定された文字列が、複雑性の要件を満たしていないことが原因のようです。
パスワードまではエクスポートされないので、VM をエクスポートした場合は毎回こうなりそうです。
適当なパスワードに変更して、再度 plan を実行したらうまくいきました。
Azure Resource Graph での指定
最後に、Resource Graph での指定を試してみます。
ディレクトリを作成し、移動しておくところまでは同様です。
以下のコマンドを実行し、Network 系のリソースのみをエクスポートしてみます。
aztfexport query "type contains 'Microsoft.Network'"
LB や VNet など、Network 系リソースのみがエクスポートされたファイルが作成されました。
終わりに
ツールがどんな感じなのか試してみましたが、コマンドで対象を指定してエクスポートするだけなので、非常に簡単でした。
Terraform で管理したいけど既にリソースは存在している、コード化の手間を省きたい、というときには便利そうです。