📘

Azureで使うInfrastructure as Code(IaC)は何が良いか

2025/01/25に公開

はじめに

個人的な感想です。

長年AzureのインフラをIaCで開発してきましたが、最近はTerraformも覚えてきて一応以下の3つは習得できたかなと。

  • Azure Resource Manager Template(ARM)
  • Bicep
  • Terraform

それぞれ構文も異なりますが、作りたいAzureリソース、設定したいリソースパラメータの指定方法が異なるだけです。

いずれしても結局はAzureインフラの設計が行えないとダメです。

それぞれの特徴などについて、私見で記しました。

各テンプレートの概要

Azure Resource Manager Template(ARM)

記述形式はjsonです。

https://github.com/katakura/azure-container-app-minecraft/blob/main/exported/arm-from-portal/mainTemplate.json#L27-L40

こちらをゼロから作成するのはとても大変ですが、以下のドキュメントを読み進めると作れるようになるでしょう。

https://learn.microsoft.com/azure/azure-resource-manager/templates/overview?WT.mc_id=AZ-MVP-5002499

Bicep

記述形式はMicrosoftのオリジナルです。

https://github.com/katakura/azure-container-app-minecraft/blob/main/mc.bicep#L121-L130

jsonによくあるカンマの記載忘れによる構文エラーのストレスから少し開放されるほか、他のリソース参照やパラメータの指定方法がとても簡単に記述できます。

https://learn.microsoft.com/azure/azure-resource-manager/bicep/overview?tabs=bicep&WT.mc_id=AZ-MVP-5002499

Terraform

記述形式はTerraformオリジナルのHCLというものです。

https://github.com/katakura/azure-container-app-minecraft/blob/main/exported/tf-from-aztfexport/after/main.tf#L89-L95

HCLを覚えると、Microsoft Azureに限らず、各種クラウドのインフラコードを作れるようになりますね。

主にAzureで使う場合は以下のURLにあるAzureRMや、AzAPIのリソースプロバイダを使っていくことになります。

https://learn.microsoft.com/azure/developer/terraform/overview?WT.mc_id=AZ-MVP-5002499

学習コスト

どのIaCを選択するにしても、Azureそのものの理解は同等に必要です。

まずは、Azure Portalでポチポチして各リソースが希望する構成にする事ができるようになってください。

その後、インフラコードに落とし込んでいくのが良いと思いますが、個人的には学習コストは以下の順番だと思います(上位になるほど楽)

  1. Bicep
  2. Terraform
  3. ARM

私はARMから入った口なのですが、Bicepが登場してからはずっとこちらを使っていました。

Bicepで作成されたコードは一旦ARM Templateに変換されてからAzure上にデプロイされます。

逆にARM Templateで書かれたコードもBicepに変換後、自分好みに修正する事ができます。

TerraformはMicrosoft Azureに限らず各種クラウドに対応しているため、HCL構文などに関するネット上の情報量はとても多いです。

書きやすさ

GitHub Copilotなどの機能が日々進化しているので将来はわかりませんが、Visual Studio Codeで開発する際の書きやすさは以下の順番だと思います(上位になるほど楽)

  1. Bicep
  2. Terraform
  3. ARM

これも私見だらけですが、「Bicepの便利さの半分はVSCodeの拡張機能でできている」と思います。

https://learn.microsoft.com/azure/azure-resource-manager/bicep/install?WT.mc_id=AZ-MVP-5002499

GitHub Copilotが使えない場合でも、この拡張機能を入れれば開発が捗ります。

Terraformも書きやすいとは思いますよ。来月あたりに本気でTerraformのコードを書くお仕事が始まるので、その成果次第では上記のランキングももしかしたら変更されるかもですw

結局のところ

自分のプロジェクトの都合で選択していくことになるかとは思います。

シチュエーション 第一候補 第二候補
Azureのみで開発 Bicep Terraform
既にTerraformを知っている or マルチクラウドの開発 Terraform
Azure Marketplaceの公開用 ARM

コードの相互変換も完全ではない場合がありますが、一応以下のツールを使えば行えます。

変換元 変換先 使用ツール
デプロイ済Azureリソース ARM ポータルのエクスポート機能
デプロイ済Azureリソース Terraform aztfexport
ARM Bicep Bicep CLI
Bicep ARM Bicep CLI
  • aztfexport

https://learn.microsoft.com/azure/developer/terraform/azure-export-for-terraform/export-terraform-overview?WT.mc_id=AZ-MVP-5002499

  • Bicep CLI

https://learn.microsoft.com/azure/azure-resource-manager/bicep/decompile?tabs=azure-cli&WT.mc_id=AZ-MVP-5002499

aztfexportについては、以下の記事でも過去に試用記を投稿しています。

https://zenn.dev/yotan/articles/4aaa62fd11abee

おわりに

どのツールを使っても、インフラ構築にかかるコストが短縮されるのは間違いありません。

それぞれの目的や既に持っている知見で選択するのが良いと思います。

Microsoft公式ドキュメントは、これら全てのIaCについて全力で詳細情報が記載されていると考えますので安心してください。

この投稿が、皆さんのClickOpsからDevOpsへの脱却の一歩として始める手掛かりになれば幸いです。

※ClickOps: Web管理画面からマウスをポチポチしてインフラ作成を行う手法

Discussion