Azure Terrafy (aztfy) 環境準備から既存Azureリソースのインポートまでやってみた

Azure,Others,Terraform,Virtual Machine

Terraformで既存のAzureリソース情報を読み込む場合はTerraform Importを利用します。
この場合.tfstateファイルは更新されますがリソースの構成ファイル(.tfファイル)はImport後に自分で作成する必要がありました。

Azure Terrafyを利用すると.tfstateファイル生成と同時に構成ファイル(.tfファイル)も自動的に生成されます。

Azure Terrafy

今回はAzure Terrafy(aztfy)の実行環境準備から既存Azure リソース情報をTerraformにインポートする所までやってみました。

スポンサーリンク

Azure Terrafy実行環境準備

Azure Terrafy(aztfy)必要要件

Azure Terrafy実行にはGoやAzure CLIが必要になります。

    • Go
    • Azure CLI
    • Managed ID
      • 対象リソースグループに対する読み取り権限

※Terraform環境の準備は必要ありません。
※Managed IDによる認証が無いとaztfy実行時の認証がうまく行きませんでした。
※今回はWindows環境を利用しています。

Go インストール

Goインストール手順はこちらを参照願います。

Azure CLIインストール

Azure CLIのインストール方法はこちらを参照願います。

Windows での Azure CLI のインストール

Azure Terrafy(aztfy)インストール

Go installでAzure Terrafyをインストールしています。
インストール後の確認はaztfy -vで行っています。

Azure Terrafyインストール

go installを使ってAzure Terrafyをインストールします。

Azure Terrafy(Install)

PS C:\Terraform\aztfy> go install github.com/Azure/aztfy@latest
go: downloading github.com/Azure/aztfy v0.5.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0
go: downloading github.com/urfave/cli/v2 v2.8.0
go: downloading github.com/charmbracelet/bubbles v0.10.4-0.20220412141214-292a1dd7ba97
go: downloading github.com/charmbracelet/bubbletea v0.20.1-0.20220516164627-a5f28a3a04bb
go: downloading github.com/mitchellh/go-wordwrap v1.0.0
go: downloading github.com/muesli/reflow v0.3.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0
go: downloading github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0
~ (以下略) ~
インストールの確認はaztfy -vで行います。
aztfy versionと表示されればOKです。
PS C:\Terraform\aztfy> aztfy -v
aztfy version dev

Azure Terrafy(aztfy)の実行

Azure VM(仮想マシン)環境をAzure Terrafy(aztfy)を使ってTerraformの構成情報を取り込んでみます。

Azure既存リソース環境準備

こちらの仮想マシン環境を使います。

今回の既存Azureリソースインポート対象を環境をAzure Portalで確認してみます。

Terraformインポート対象の既存Azureリソース
test-rgにAzure VM(仮想マシン)1台デプロイされた環境になります。

Azure Terrafy実行環境

Azure Terrafy(aztfy)の実行はManaged IDで権限付与を行ったAzure VM上で実行しています。
権限は取り込み対象のリソースグループに対して閲覧者権限以上を割り当てて実施しています。

Azure Terrafy(aztfy)の認証エラー

Azureテナントへのログインが出来てない場合や権限付与がされていない場合などにはaztfy実行時にエラーが表示されます。

認証エラー例
Azure Terrafy(aztfy)実行環境でManaged ID設定が出来てなかった場合に表示されたエラーです。
Identity not foundと表示されています。
——————————————————————————–
RESPONSE 400 Bad Request
——————————————————————————–
{
“error": “invalid_request",
“error_description": “Identity not found"
}
——————————————————————————–

Azure Terrafy(aztfy)を使って既存Azure リソースをインポート

Azure TerrafyによるTerraformへのインポートは、”aztfy リソースグループ名”で行います。
事前にAzure CLI(az login)でインポート対象のサブスクリプションにログインしておく必要があります。

※Azure CLIログイン時のデフォルトサブスクリプションを取り込み対象のサブスクリプションにしておく必要があります。

aztfy実行
インポート対象の既存Azure リソース環境です。
test-rgをTerraformにインポートしてみます。
Terraformの構成ファイルを保管したいディレクトリでaztfyコマンドを実行します。
PS C:\Terraform\aztfy> aztfy test-rg

Azure Terrafyの画面が表示されます。

  • 対象リソースグループ名
  • 構成ファイル作成対象のリソース
  • 操作ガイド

”w”で対象リソースグループの取り込みが開始されます。

取り込み中は実行結果と進捗率が表示されます。
取り込みが完了するとTerraform state and the config are generated at: ”構成ファイル保管ディレクトリ”とメッセージが表示されます。

既存Azure リソースのTerraformインポート結果を確認

既存AzureリソースのTerraformインポート結果を確認してみます。

結果確認

ディレクトリを確認すると以下のファイルが生成されている事が分かりました。

  • Terraformの実行ファイル
  • Azure Terrafyのリソースマッピングファイル
  • Terraformのロックファイル
  • Terraformの構成ファイル
  • tfstateファイル

Terraformの構成ファイルはprovider.tfとmain.tfの2つ生成されている事が分かります。

provider.tfにTerraformの設定内容が保管されている事が分かります。

main.tfに取り込みを行ったAzureリソースの構成が保管されている事が分かりました。

depends_onでそれぞれのリソースの依存関係も生成されている事が分かります。

既存AzureリソースのTerraform取り込みが出来ている事が分かりましたが、一方で仮想マシンの構成情報が保管されていない事が分かりました。

Terraform Importについてはこちらに纏めています。併せて見て頂けると大変有難いです。

Azure Terrafy(aztfy)実行ディレクトリは空でないといけない

Azure Terrafy(aztfy)実行時はすべてのファイルが新規生成される為、実行ディレクトリが空である必要があります。

上書き確認
Azure Terrafy(aztfy)実行ディレクトリが空でない場合は確認メッセージが表示されます。”Y”を選択するとディレクトリ内のファイルがクリアされます。
The output directory is not empty – overwrite (Y/N)?

※既存の構成情報等のファイルがすべてクリアされます。必要な情報は必ずバックアップしておきましょう。

Azure Terrafy(aztfy)でSkipされたリソースをTerraformにインポート

Azure TerrafyでTerraformにリソース構成情報取り込み時にSkipと表示されている場合があります。
Skipと記載されたリソース明示的に指定しないと取り込みされません。
再度Azure Terrafy(aztfy)を使って取り込みを行います。

aztfy実行

aztfy test-rgを再度実行します。
Azure Terrafyの画面を確認すると仮想マシンのリソース部分がSkipになっている事が分かります。

Skipと表示されているリソースについてはTerraform構成ファイルが生成されません。
仮想マシンの構成情報が生成されなかったのはSkipされていた為です。

Skipと表示されている仮想マシンのリソースを選択します。
Enterを押すとSkipと表示されていた部分が入力できるようになります。

ここに取り込むAzureリソースのリソースタイプ.タグ名と言う記載の仕方になります。
今回はLinuxのAzure VM(仮想マシン)なので、azurerm_linux_virtual_machineと指定しています。

Azure VM(仮想マシン)の構成情報もインポートされている事が分かります。
生成されたmain.tfを確認すると仮想マシンの構成情報が含まれている事が分かります。

最後に

今回はAzure Terrafy(aztfy)を使って、既存Azureリソース情報をTerraformにインポートしてみました。
リソースグループを指定するだけで、Terraformに取り込む事ができて、かつ構成情報も自動生成されて非常に便利かと思いました。

今後もTerraform関連について色々試して行きたいと思います。

Terraform関連の記事はこちらに記載しております。併せて見て頂けると大変有難いです。

Terraformの記事一覧

スポンサーリンク