今回はAzure上に構築済みのリソースを自動でコードに落とし込み、Terraform上で管理できるようにし、コードによってパラメータ変更ができるようにする方法について紹介したいと思います。
事前準備
Terraformの準備
前回私が投稿した以下サイトに習い、Terraformの準備をしてください。

リソースの準備
事前にAzure上でリソースの作成をしてください。今回は以下のような設定のVirtual Machineを例にします。
コード作成
まず、既存リソースからコードを自動的に作成します。作成するにはimportブロックを用います。importブロックは任意の名前で作成した「.tfファイル」内に記述してください。
import {
id = "/subscriptions/サブスクリプションID/resourceGroups/リソースグループ名/providers/Microsoft.Compute/virtualMachines/仮想マシン名"
to = azurerm_virtual_machine.import-vm
}
idではVMのリソースIDを入力してください。リソースIDは対象VMの「プロパテイ」から参照することができます。
toの「import-vm」の部分はTerraform内での名前なので、自由に設定してください。
コマンド実行
以下コマンドにより、既存リソースの設定からコードを自動生成します。
terraform plan -generate-config-out = "ファイル名.tf"
このコマンドを実行することで、コマンド内で指定したファイル名の「.tfファイル」が自動的に生成され、そのファイル内で以下のようなコードが自動的に生成されます。
resource "azurerm_virtual_machine" "import-vm" {
location = "japaneast"
name = ""
network_interface_ids = [""]
resource_group_name = "Terraform_Verification"
tags = {Name = ""}
vm_size = "Standard_B1ls"
zones = ["1"]
additional_capabilities {
}
boot_diagnostics {
enabled = true
# (1 unchanged attribute hidden)
}
os_profile_linux_config {
disable_password_authentication = false
}
storage_image_reference {
id = null
offer = "ubuntu-24_04-lts"
publisher = "canonical"
sku = "server"
version = "latest"
}
storage_os_disk {
caching = "ReadWrite"
create_option = "FromImage"
disk_size_gb = 30
managed_disk_id = ""
managed_disk_type = "StandardSSD_LRS"
name = ""
os_type = "Linux"
write_accelerator_enabled = false
# (2 unchanged attributes hidden)
}
delete_data_disks_on_termination = true
}
コードが生成出来たら以下コマンドを実行します。
terraform apply
上記コマンドを実行すると、「Plan:1 to import」と表示されるので、「yes」を記述し、Enterを押下します。
これによりリソースをTerraformで管理できるようになり、生成されたコードを修正し「terraform apply」を実行することでパラメータの変更ができるようになります。
注意事項
コードを自動生成する際に、ユーザ名やパスワードなどの機密情報等、パラメータによっては表示されないものがあります。生成されないパラメータの中には「terraform apply」実行時にエラーを発生させるものもありますので注意してください。どうしてもエラーを解消できない場合は、生成されたコードのresourceブロック内でエラーの出ているパラメータを以下のようにlifecycleブロックの「ignore_changes」で囲み、再度「terraform apply」を実行してみてください。
lifecycle {
ignore_changes = [
os_profile,
boot_diagnostics,
additional_capabilities
]
}
このブロックは本来、値を変更したくないパラメータがあるときに使用するものですが、エラー解消に役立つので使ってみてください。
感想
たった数行のコードで既存のリソースを自動でコードに落とし込めるのは驚きましたし、コードを書くのが苦手な人でも一旦ポータル上で構築してから運用する際はコードで管理するということができるので非常に便利だと思いました。
おわりに
今回はTerraformによる既存Azureリソースのコード化について紹介しました。新規作成のみならず既存リソースの取り込みもできれば、運用も楽になると思いますのでぜひ使ってみてください。