Azureで使うInfrastructure as Code(IaC)は何が良いか
はじめに
個人的な感想です。
長年AzureのインフラをIaCで開発してきましたが、最近はTerraformも覚えてきて一応以下の3つは習得できたかなと。
- Azure Resource Manager Template(ARM)
- Bicep
- Terraform
それぞれ構文も異なりますが、作りたいAzureリソース、設定したいリソースパラメータの指定方法が異なるだけです。
いずれしても結局はAzureインフラの設計が行えないとダメです。
それぞれの特徴などについて、私見で記しました。
各テンプレートの概要
Azure Resource Manager Template(ARM)
記述形式はjsonです。
こちらをゼロから作成するのはとても大変ですが、以下のドキュメントを読み進めると作れるようになるでしょう。
Bicep
記述形式はMicrosoftのオリジナルです。
jsonによくあるカンマの記載忘れによる構文エラーのストレスから少し開放されるほか、他のリソース参照やパラメータの指定方法がとても簡単に記述できます。
Terraform
記述形式はTerraformオリジナルのHCLというものです。
HCLを覚えると、Microsoft Azureに限らず、各種クラウドのインフラコードを作れるようになりますね。
主にAzureで使う場合は以下のURLにあるAzureRMや、AzAPIのリソースプロバイダを使っていくことになります。
学習コスト
どのIaCを選択するにしても、Azureそのものの理解は同等に必要です。
まずは、Azure Portalでポチポチして各リソースが希望する構成にする事ができるようになってください。
その後、インフラコードに落とし込んでいくのが良いと思いますが、個人的には学習コストは以下の順番だと思います(上位になるほど楽)
- Bicep
- Terraform
- ARM
私はARMから入った口なのですが、Bicepが登場してからはずっとこちらを使っていました。
Bicepで作成されたコードは一旦ARM Templateに変換されてからAzure上にデプロイされます。
逆にARM Templateで書かれたコードもBicepに変換後、自分好みに修正する事ができます。
TerraformはMicrosoft Azureに限らず各種クラウドに対応しているため、HCL構文などに関するネット上の情報量はとても多いです。
書きやすさ
GitHub Copilotなどの機能が日々進化しているので将来はわかりませんが、Visual Studio Codeで開発する際の書きやすさは以下の順番だと思います(上位になるほど楽)
- Bicep
- Terraform
- ARM
これも私見だらけですが、「Bicepの便利さの半分はVSCodeの拡張機能でできている」と思います。
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
- Bicep CLI
aztfexportについては、以下の記事でも過去に試用記を投稿しています。
おわりに
どのツールを使っても、インフラ構築にかかるコストが短縮されるのは間違いありません。
それぞれの目的や既に持っている知見で選択するのが良いと思います。
Microsoft公式ドキュメントは、これら全てのIaCについて全力で詳細情報が記載されていると考えますので安心してください。
この投稿が、皆さんのClickOpsからDevOpsへの脱却の一歩として始める手掛かりになれば幸いです。
※ClickOps: Web管理画面からマウスをポチポチしてインフラ作成を行う手法
Discussion