この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
はじめに
こんにちは、パーソルの永井です。
本記事ではAzureでIaCをする際に、どういった選択肢があるのか、
それぞれの特徴や、比較した際のメリットデメリットについて記載してみます。
自社/個人の環境を踏まえ、どういったサービスを使うのがいいか、少しでも本記事が選択の助けになれば幸いです。
AzureにおけるIaCについて
そもそもIaCとはなんでしょうか、Wikipediaによると以下と定義されています。
Infrastructure as Code(IaC) はコンピューティング・インフラ(プロセス、ベアメタルサーバー、仮想サーバーなど)の構成管理・機械処理可能な定義ファイルの設定・プロビジョニングを自動化するプロセスである。
簡単に言うと、各種パラメータなどを記載したコードを用いて環境を自動構築する、というものになります。
IaCを用いることで最小限の工数で同じ環境を複数作ったり、完全に同じ環境を作り直すことができる事がメリットです。
AzureにおけるIaCとは、コードを用いて各種リソースをデプロイする事となります。
以下、その際に選択肢に上がるであろうARMテンプレート/Bicep/Azure BluePrintについて簡単に表にまとめました。
なお、下記表の難易度はARMテンプレートを使用してデプロイをした経験がある人を想定しています。
ARMテンプレート | Bicep | Azure BluePrint | |
|
〇 |
〇 |
✖ |
デプロイ方法 |
CLI(コマンド使用) |
GUI(AzurePortal使用) | |
導入難易度※1 |
易しい | 比較的易しい | 難しい |
運用難易度※2 |
難しい | 比較的易しい | 易しい |
※1 構築の際にコーディングからリソースのデプロイをする難易度をそれぞれ相対的にあらわしています。
※2 運用の際にコードの修正、バージョン管理、リソースのデプロイを行う難易度をそれぞれ相対的にあらわしています。
では、それぞれの特徴、比較した際のメリットデメリットについて詳しく見ていきます。
ARMテンプレートについて
■概要
まずは元祖IaC、ARMテンプレートについてです。
ARMテンプレートとは、Azure Resource Manager テンプレートの略語で、JavaScript Object Notation (JSON) で記載されているファイルとなります。
デプロイ方法はCLIとなっており、PowerShellやAzure CLI/Azure Cloud Shellを使用します。
※詳細については、Microsoft公式ドキュメント[ARM テンプレートとは]をご参照ください。
■導入難易度
表では導入難易度は易しい、と記載していますが、絶対的な難易度はコートの長さ(記述量)かによります。
複数のリソースを含むARMテンプレートの場合は、記述内容も比例して複雑になります。
ただし、後述の通りBicep及びAzure BluePrintと比較すると導入の際に必要な工程は少ないこと、ARMテンプレートを使用したことがある人を想定している事から、ここでは難易度を易しいとしました。
■運用難易度
まずはコードの修正に関しては、導入を行った人と同じ人が修正などを行えば比較的易しいかもしれませんが、
そうではない場合、コードの長さ、複雑性によっては非常に煩雑なものととなります。
バージョン管理に関しては工夫次第ではありますが、かなり気をつけて運用する必要があります。
■メリット/デメリット
他2つと比較した際に、ARMテンプレートを使用するメリットは以下となります。
・これまでの知識、経験が活かせる
→ARMテンプレートに慣れ親しんだ人は慣れた形式を使用することができます。
また、過去に使用したARMテンプレートを流用できます。
・ナレッジが豊富である
→上記と一部重複しますが、WEBにも数々のナレッジがありトラブルシュートも比較的容易です。
以前からあるものなので安定性は高いと言えるでしょう。
一方デメリットは以下となります。
・運用難易度が比較的高い
→前述の通り、可読性が低くコードの修正及びバージョン管理が大変です。
Bicepについて
■概要
次に、Bicepについてです。
Bicepとは、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。
ARMテンプレートであるjsonと比べ、非常に可読性が高く、単純な構文で記述することが出来ます。
デプロイ方法はRMテンプレートと同様にCLIとなっており、PowerShellやAzure CLI/Azure Cloud Shellを使用します。
※詳細については、Microsoft公式ドキュメント[Bicepとは]をご参照ください。
■導入難易度
表では導入難易度は比較的易しい、と記載しています。
Bicepのメリットである高い可読性や構文がシンプルなことはもちろん、ARMテンプレート(json)からBicepの変換が容易に可能な事が理由となります。
ただし、ARMテンプレートと比較するとBicepを使用するための環境の構築が必要であること、初期学習の手間などを鑑みて、導入の際に必要な工程が多いことから難易度を比較的易しいとしました。
■運用難易度
まずコードの修正に関しては、比較的簡単です。
複雑なプログラミング言語に関する知識を必要とせず、Microsoftのドキュメントなどに一通り目を通せばある程度のコーディングが可能になります。
バージョン管理に関しては工夫次第ではありますが、ARMテンプレートと同様にかなり気をつけて運用する必要があります。
■メリット/デメリット
他2つと比較した際に、ARMテンプレートを使用するメリットは以下となります。
・コードの修正が比較的に容易である
→繰り返しになりますが、Bicepは可読性が高くARMテンプレートと比較すると修正の工数などかなり削減できます。
・ARMテンプレートで可能なことはBicepでも可能である
→BicepはARMテンプレート(json)にコンパイルされ、処理されます。
ARMで実現可能なことは基本的にBicepでも可能です。
・コストがかからない
→Bicepはオープンソースであり完全に無料で使用できます。
また、Microsoftのサポートも使用できます。
一方デメリットは以下となります。
・環境の構築が必要
→VS Codeなどでコーディングする場合に拡張機能をいれる必要があります。
また、デプロイにはPowerShellにBiceo CLIを手動でインストール する、もしくはAzure CLI のバージョン 2.20.0 以降 をインストールする必要があります。
・これまでの知識、経験が活かせない
→前述の通り、Microsoftのドキュメントなどで学習が必要です。
また、過去に使用したARMテンプレートなどはそのまま使用することはできません。
ただし、ARMテンプレートから同様の内容のBicepへのデコンパイルはツールなどを使用すればワンクリックで可能です。
・ナレッジが少ない
→ARMテンプレートと比較した場合ですが、情報は少ないです。
絶対的なナレッジの量としては十分だと思います。
Azure BluePrintについて
■概要
最後にAzure BluePrintについてです。
Azure BluePrintは2018/9/24に公開されたサービスですが、現在(2021/12/19)のところまだプレビュー中となっており、馴染みのない方も多いかもしれません。
どういったサービスなのか、公式のドキュメントには以下と記載されています。
ブループリントは、さまざまなリソース テンプレートやその他のアーティファクトのデプロイを宣言によって調整する手法です。
(中略)
このサービスは、”環境の設定” が容易になるように設計されています。 この設定は、多くの場合、一連のリソース グループ、ポリシー、ロールの割り当て、および ARM テンプレートのデプロイから成ります。 ブループリントは、これら個々の “アーティファクト” の種類をまとめたパッケージです。ブループリントにより、そのパッケージの作成とバージョン管理を行うことができます (CI/CD (継続的インテグレーションと継続的デリバリー) パイプラインを使用して行うこともできます)。 最終的には、それぞれが、監査と追跡が可能なサブスクリプションに 1 回の操作で割り当てられます。
結局のところ何が出来るのか、上記を読んでもわかりづらいかもしれませんが、Azure BluePrintはARMテンプレートで出来ることはすべてできます。
具体的には以下のリソースをAzure Portal上のGUIで設定、管理、及びデプロイすることが可能です。
・ロールの割り当て
・ポリシーの割り当て
・Azure Resource Manager テンプレート (ARM テンプレート)
・リソース グループ
※本記事では、ARMテンプレート/Bicepとの比較がメインですので、詳細については、Microsoft公式ドキュメント[Azure Blueprint とは]を参照ください。
■導入難易度
表では導入難易度は難しい、と記載しています。
Azure BluePrintが未だメジャーなサービスではなくWEB上のナレッジが少ない事、BluePrintの[発行]や[割り当て]といった固有の概念をまずは理解することが必要な事が理由となります。
ただし、作成方法などは公式のドキュメントがありますので時間をかければ、基礎的な部分を習得することはそこまで難しくはないと思います。
■運用難易度
まずコードの修正に関しては、一部ARMテンプレートの修正が必要なことから難しい部分もあるかもしれません。
ただし、ロールやポリシーの割り当てなどはAzure PortalのGUIにて設定可能となっており、ARMテンプレートの使用は一部に限られていることから、ARMテンプレートのみで運用する場合と比較すると易しいという評価になります。
バージョン管理に関しては非常に優秀で、リリース前のバージョンや現在のバージョン、過去のバージョンなど、複数のバージョンをAzure Portal上で管理することができ、切り戻しも簡単に行うことが可能です。
■メリット/デメリット
他2つと比較した際に、ARMテンプレートを使用するメリットは以下となります。
・運用、特にバージョンの管理が優秀である
→Azure Portal上で管理することが出来ます。
・ARMテンプレートで可能なことはAzure BruePrintでも可能である
→ARMテンプレートをそれぞれのブループリントにインポートできます。
また、ロールやポリシーの割り当てなどはGUIで簡単に設定できます。
一方デメリットは以下となります。
・初期学習が必要
→Azure BluePrint特有の概念を理解する必要があります。
・一般公開されていない
→プレビュー中のサービスであり、商用環境などで使用するのは難しいかもしれません。
・Bicepが使用できない
→現在のところインポートできるファイルはARMテンプレート(json)のみとなっており、Bicepファイルを使用することはできません。
最後に
以上が、ARMテンプレート/Bicep/Azure BluePrintの特徴、比較した際のメリットデメリットになります。
個人的にはAzure BluePrintが一般公開され、Bicepファイルが扱えるようになればかなり良い選択肢になるかなと思います。