今まで時間をとって勉強ができなかった Azure の Infrastructure as Code (IaC) に挑戦します
Infrastructure as Code とは
IaC とは、マシンで読み取り可能な定義ファイルを使用してインフラストラクチャ リソースのライフサイクルを管理するためのプラクティスとツールです
コードとしてインフラストラクチャを使用して Azure ランディング ゾーンを更新する - Cloud Adoption Framework | Microsoft Learn
IaC を使うと インフラストラクチャの管理をコードで行うことができます
Azure での IaC
Azure で IaC を実行するにはいくつかの選択肢があります
このブログでは ARM テンプレート と Bicep について取り上げたいと思います
ARM テンプレート
Azure Resource Manager テンプレート (ARM テンプレート) は JSON 形式で記述します
また、以下のような特徴があるそうです
- 宣言型
- オーケストレーション
- Azure には依存関係のあるサービスがありますが、順番を意識せずに記述が可能
- モジュール式
- ARM テンプレートを1つの巨大なファイルにしなくても役割ごとに分けて、参照することが可能
- 変更のプレビュー
- どのリソースが作成・削除・変更されるのかをデプロイせずに把握
- 検証
- デプロイ実行前に検証作業が行われるため、デプロイの失敗する可能性が低い
- エクスポート
- 1 から ARM テンプレートを作成しなくても、リソース グループなどをエクスポートできる
※公開情報からいくつかを抜粋
テンプレートの概要 - Azure Resource Manager | Microsoft Learn
ARM テンプレートはこんな感じで記載されます
|
|
要素を少し整理します
要素名 | 必須 | ざっくり説明 |
---|---|---|
$schema | yes | ARM テンプレートのスキーマファイルの場所。バージョンが異なるとリソースによっては対応してないパラメータが存在する可能性も? |
contentVersion | yes | ARM テンプレートのバージョン。1.0.0.0 などを入れておく |
apiProfile | no | resource のなかで、API のバージョンを記載せずに、ここでまとめて記載をすることが可能 |
parameters | no | デプロイする内容をカスタマイズするときに使用 |
variables | no | ARM テンプレートの中で同一の記載を省略するときに使用 |
functions | no | ARM テンプレートの中でユーザーが定義した関数を記述 |
resources | yes | ARM テンプレートによって作成・削除・変更を行うリソースを記述する。メインの場所 |
outputs | no | デプロイ後の戻り値 |
詳細を知りたい方は公開情報を確認ください
テンプレートの構造と構文 - Azure Resource Manager | Microsoft Learn
JSON 形式ではコメントアウトができないことが一般的だそうですが (他の JSON 形式の経験がない…) ARM テンプレートではコメントアウトをすることができます
ただし、JSON としてエラーが出てしまう可能性があるので、VS code を使う場合には拡張機能を正しく入れておく必要があります
インライン コメントについては、// または /* … */ のいずれかを使用できます。
Bicep
Bicep は Azure リソースをデプロイするためのドメイン固有言語です
Azure のために作られたものってことですね
ARM テンプレートの公開情報にも記載がありますが、Bicep は ARM テンプレートと同じ機能を提供しつつ、使いやすい構文にしているそうです
ARM テンプレートと同じ機能を提供するが構文がより使いやすい、Bicep という名前の新しい言語が導入されました
テンプレートの概要 - Azure Resource Manager | Microsoft Learn
Bicep の特徴を見てみます
- すべてのリソースの種類と API バージョンのサポート
- 単純な構文
- JSON 形式の ARM と比べて簡潔で読みやすくなっている
- オーケストレーション
- Azure には依存関係のあるサービスがありますが、順番を意識せずに記述が可能
- モジュール式
- Bicep ファイルを1つの巨大なファイルにしなくても役割ごとに分けて、参照することが可能
- 変更のプレビュー
- どのリソースが作成・削除・変更されるのかをデプロイせずに把握
※公開情報からいくつか抜粋
Azure リソースをデプロイするための Bicep 言語 - Azure Resource Manager | Microsoft Learn
Bicep を使って Azure サービスをデプロイするときは ARM テンプレートへの変換処理が行われています
デプロイ中、Bicep CLI により、Bicep ファイルが ARM テンプレート JSON に変換されます。
Azure リソースをデプロイするための Bicep 言語 - Azure Resource Manager | Microsoft Learn
そのため、よりシンプルな Bicep を使って開発を行い ARM テンプレートへ変換 ということも可能です
ARM テンプレートと Bicep の比較
公開情報にストレージ アカウントを作成するときのサンプルがあったので、コピペしておきます
|
|
|
|
確かに行数を見ると短くなっています
個人的に JSON はかっこの位置の対応関係が見ずらいと思うんですが、Bicep はそれがない分見やすく感じます
これを見ると、今から勉強をするなら Bicep が良さそうです
しかし、Bicep は ARM テンプレートに変換されてからデプロイされるという特徴がありました
そのためトラブルシューティングのためには ARM テンプレートの知識もある程度必要になる気がします
また Azure の IaC のサービスには ARM テンプレートしか対応していないものがあります
Azure Deployment Environments では、現在 Azure Resource Manager (ARM) テンプレートのみがサポートされています。
Azure Deployment Environments とは - Azure Deployment Environments | Microsoft Learn
以上のことから、自分はしばらくの間は ARM テンプレートと Bicep の両方を少しずつ勉強しようと思います
まとめ
Azure の IaC には ARM テンプレートと Bicep がある(他にもある)
Bicep の方に利点があるが、ARM テンプレートも大事