🌏

TerraformでAzureにVMをデプロイするチュートリアルを覗いてみる

2023/10/28に公開

これは何...?

最近はBicepが個人的ブームなところがあり、いくつかのサンプルを作ったり解説記事を書いたりしてきました。

一方で、IaCをやっているのにTerraformを扱ったことがないという状況にWhy Bicep?を答えられない不安を覚え、Terraformも触ってみようと一念発起しております。今回の趣旨としてはBicep経験者としてTerraformゼロから触ってみよう、ということでチュートリアルを見ていくというものです。

Microsoftのドキュメント

Terraformは管理がHashicorpということもあり、Microsoftの直接のサポートを受けづらい製品です。おそらくベストエフォートでの対応という形になると思います。ただ、ドキュメントはゼロではないので、簡単なチュートリアルなんかは用意されています。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/windows/quick-create-terraform

触ってみよう

先述のチュートリアルの資材をもとに、自分なりのコメントを残しながら書き直したものをこちらに格納しています。適宜見てみてください。
https://github.com/zukakosan/terraform-learn/tree/main/20231027-vm

シンプルに以下のようなリソース群がデプロイされます。

上記サンプルにおける個人的ポイント

random_petって何ぞ?

providers.tfでインポートしたrandomのリソースとしてrandom_petというものが随所で用いられており、これは何だと迷った。結局、ランダムにペットの名前をつけるっていうちょっと変わったリソースだった。

https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet

Parent的な概念の違い

サブネットの作成にもVNETとリソースグループ名を渡すだけで、シンプルにかける。明示的な親子関係はazurermプロバイダーによってかなり抽象化されている。

main.tf
# サブネットの作成
# TerraformにはBicepでいうParent/Childの概念はないっぽい
resource "azurerm_subnet" "vnet_main_subnet" {
  name = "subnet-${azurerm_virtual_network.vnet_main.name}"
  resource_group_name = azurerm_resource_group.rg_main.name
  virtual_network_name = azurerm_virtual_network.vnet_main.name
  address_prefixes = [ "10.0.1.0/24" ]
}

NSGのアタッチがリソース定義として書ける

これは分かり易くてよい。Bicepの場合はSubnetのプロパティに含める形になる。

main.tf
# NSGとSubnetの紐づけ
# これが宣言できるのはかなり便利かも
# Bicepでは後付けでNSGをアタッチすると構文が冗長になる
resource "azurerm_subnet_network_security_group_association" "nsg_subnet_main" {
  network_security_group_id = azurerm_network_security_group.nsg_deafault.id
  subnet_id = azurerm_subnet.vnet_main_subnet.id
}

なんというか、全体的にAzure Portalを捜査しているかのような手順で記述できている気がしますね。

Terraformはポータルのデプロイ履歴に載らない?

以下のようにリソースグループにそれっぽいデプロイ履歴は残るのですが、実際に見てみるとVMのみが作成されているように見えます。それ以外のリソースの扱いが謎です(要確認)。

サブスクリプションのレベルのデプロイ履歴にはVM作成の痕跡があるものの、それ以外は見当たらない。

おわりに

BicepとTerraformの違いについてはこちらの記事を読むとイメージが付きやすいかもです。他にもあるかもですが、自分の知識もそこまでないので、一旦腑に落ちました。今後もちょくちょくTerraform x Azureの個人検証記録は上げていこうかと思っております。

https://dev.thanaism.com/2021/08/terraform/

GitHubで編集を提案
Microsoft (有志)

Discussion