はじめに
こんにちはあるいはこんばんは。みなさん、Terraformを利用していますか?あるいは、webコンソールを操作してクラウドリソースを構築していますか?
どちらもあると思います。ここで、最初はコンソール操作だったプロジェクトで、構築中や構築後にIaCをやろう!となった場合を考えてみてください。なんとなく、Terraformコード作成がコンソールポチポチと同程度の工数がかかってしまいそうです。
今回まさにその状況になったため、ツールを使って解決してみた記録です。
前提
- Azureが対象です
- Azureにすでに構築した環境があることとします
Azure Export for Terraformとは
Azure と Terraform の概念間の翻訳の摩擦を軽減するために設計されたツール。以降aztfexportと称します。
インストール方法は割愛いたします。
なお実行環境は以下です。
- Windows 10 Pro 22H2
- aztfexport.exe v0.14.0(fb772ba)
- terraform.exe v1.6.2
aztfexport実行前準備
aztfexportを使う前に、以下コマンド実行が必要です。
PS C:\tmp> az login
PS C:\tmp> az account list -o table
1つめのコマンドで、ログイン画面がポップアップするので、適切なMicrosoft IDを選択してください。
2つめのコマンドで、取得したいリソースグループがあるAzureサブスクリプションの「IsDefault」が「True」になっていることを確認してください。
Name CloudName SubscriptionId TenantId State IsDefault
----------- ----------- ------------------------------------ ------------------------------------ ------- -----------
ALPHA AzureCloud 11111111-1111-1111-1111-111111111111 00000000-0000-0000-0000-000000000000 Enabled True
BETA AzureCloud 22222222-2222-2222-2222-222222222222 00000000-0000-0000-0000-000000000000 Enabled False
(表記はダミーです)
もし「IsDefault」が適当でない場合、以下コマンドでセットしてください。
PS C:\tmp> az account set -s <SubscriptionId>
空のディレクトリに移動してください。空でないとエラーになります。
aztfexportでコード取得してみる
では、以下コマンドでリソースグループ全体を取得してみましょう。
PS C:\tmp\aztf> aztfexport resource-group <リソースグループ名>
残念ながら、試した環境では権限が不足していたのかうまく動作しませんでした。
リソースごとに取得してみましょう。
PS C:\tmp\aztf> aztfexport resource <リソースID>
Terraformerとは
さまざまなクラウドプロバイダに対応しているツール。
インストール方法は割愛いたします。
なお実行環境は以下です。
- Windows 10 Pro 22H2
- terraformer.exe v0.8.24
- terraform.exe v1.6.2
Terraformer実行前準備
Terraformerを使う前に、以下コマンド実行が必要です。
PS C:\tmp> az login
PS C:\tmp> $Env:ARM_SUBSCRIPTION_ID=<SubscriptionId>
空のディレクトリに移動してください。以下内容の「main.tf」というファイルを作成します。
terraform {
backend "local" {}
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.65.0"
}
}
}
provider "azurerm" {
features {
}
}
一度以下コマンドを実行し、Terraformを初期化してください。これで準備完了です。
PS C:\tmp\tfer> terraform init
Terraformerでコード取得してみる
に記載のオプションごとにコマンドを実行すると、小分類のリソースまで取得してくれます。
このURL記載の「resource group」は、URLに記載の「List of supported Azure resources」の大項目であって、Azureのリソースグループではありませんのでご注意ください。
このリストに記載があれば、基本かならず取得ができます。
たとえばVirtual Networkを取得するには以下のようにします。
PS C:\tmp\tfer> terraformer import azure -r virtual_network
aztfexportとTerraformerの比較
今回試したリソースグループで、2つのツールの取得可否状況は以下の通りでした。
resource | aztfexport | Terraformer | comment |
---|---|---|---|
API management service | Y | N | |
App Service | Y | Y | Terrafomerは旧形式のazurerm_app_serviceを取得する |
App Service Plan | Y | N | |
Azure Monitor Private Link Scope | Y | N | |
Log Analytics Workspace | Y | N | |
Application Gateway | Y | Y | |
storage account | Y | Y | |
data collect point | Y | N | |
network interface | N | Y | |
network security group | N | Y | |
public ip address | Y | Y | |
private dns zone | Y | Y | |
private dns a record | N | Y | |
private endppoint | N | Y | |
virtual network | Y | Y | |
subnet | N | Y | |
virtual machine | N | Y |
- aztfexportが取得できないリソースがあった(試した環境の影響かもしれないです)
- Terraformerは、用意されているオプション以外を取得できない
以上より、今回は2つのツールを組み合わせて、全体のリソースを取得しました。
まとめ
今回目的に対し、ツールをつかってサクッと解決とはならず、ツールの組み合わせで対応しました。
ツールを使うことで、たとえばリソース名をAzureコンソールからTerraformコードにコピペしたり、Azureコンソールのメニューを細かく掘ったり、といったことを省略できたと考えます。
以上、Azureの既環境からTerraformコードを作成した記録でした。
- Microsoft Azure は,Microsoft Corporation の商標または登録商標です。
- Terraform は、HashiCorp, Inc. の米国およびその他の国における商標または登録商標です。
- その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。