AZ-900

【AZ-900】Azure Resource Managerとは?インフラのコード化もできる!

【AZ-900】Azure Resource Managerとは?インフラのコード化もできる!

どうも、フリーランスエンジニアのMakotoです。

今回は、Azure Resource Managerについて解説します。

Azureのリソース管理の裏側を理解する上で重要な仕組みです。インフラをコードで表現することのメリットを理解することにも繋がります。ぜひ最後までお読みください。

それではいってみましょう!

Azure Resource Managerとは?

Azure Resource Managerは、Azureリソースを管理・デプロイするためのサービスです。略してARM(アーム)と呼ぶことが多いです。

ARMには複数のリソースを効率よく管理するための次のような仕組みが備わっています(詳細はそれぞれのリンク先記事を参照してください)

これら個々の機能についてはしっかり理解しておく必要がありますがARM自体を意識する場面はあまりありません。

また、ARMはAzureのリソースを作成・更新・削除などの要求を受け付ける窓口を担っています。

AzureResourceManagerの仕組み

AzureではAzureポータルのGUI画面だけでなく、Azure PowerShellやAzure CLIといったコマンドラインツールを使ってリソースの管理を行うこともできます。

それらの要求は必ずARMを経由し、Azure ADと連携して認証が行われた後、ARMが解釈できる形(ARMテンプレート)に変換されてリソースが展開されます。

こうした仕組みによりすべての要求は同じ窓口を介して処理されるため、異なるツールであっても一貫した結果と機能が得られるようになっています。

例えるなら、日本語、中国語、韓国語で送信したメールが世界共通語の英語に変換されているようなイメージでしょうか。

Azure Resource Managerは異なるツールからデプロイしてもAzure環境の一貫性を保つための仕組みを提供する

ARMテンプレートとは?

ARMが解釈できる形に変換されたコードのことを「ARMテンプレート」と呼び、JSON形式で表現されます。

ARMテンプレートは例えば次のように記述します。

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {},
  "resources": [
      {
          "name": "azstart-vnet",
          "type": "Microsoft.Network/VirtualNetworks",
          "apiVersion": "2021-01-01",
          "location": "japaneast",
          "properties": {
              "addressSpace": {
                  "addressPrefixes": [
                      "10.1.0.0/16"
                  ]
              },
              "subnets": [
                  {
                      "name": "default",
                      "properties": {
                          "addressPrefix": "10.1.0.0/24"
                      }
                  }
              ]
          }
      }
  ]
}

 

初見だとよくわからないかもしれませんが、ここでは雰囲気だけ掴んでください。AZ-900試験では構文については問われません。

JSON形式は波カッコや角カッコでパラメータを記述するので行数が多くなりがちですが、よーく眺めてみるとresourcesというブロックの中身から次のような情報が読み取れると思います。

プロパティ
リソース種別(type)Microsoft.Network/VirtualNetworks
名前(name)azstart-vnet
リージョン(location)japaneast
アドレス空間(addressPrefixes)10.1.0.0/16
サブネットの名前(name)default
サブネットのアドレス空間(addressPrefix)10.1.0.0/24

 

これはつまり、Azureポータルの画面上から入力するそれぞれのパラメータがコードで表現されているということです。

このようにネットワークやサーバなどのインフラ構成をコードで管理・デプロイすることを「Infrastructure as Code(IaC)」と呼びます。

Azureが提供しているIaCツールとしてはARMテンプレートの他にBicep(バイセップ)があります。サードパーティーのツールとしてはTerraformが有名です。

さて、ARMテンプレートに話を戻します。

ARMテンプレートは一から書くこともできますが、実はAzureポータルが勝手に作成してくれています。「確認および作成」の画面にある「Automationのテンプレートをダウンロードする」をクリックしてみましょう。(この例では仮想ネットワークを作成しようとしています)

Automationのテンプレートをダウンロードする

そうすると今から作成しようとしているリソースが記述されたARMテンプレートを確認したりダウンロードすることができます。

作成前にARMテンプレートを確認 もしくは、作成したあとのデプロイ完了画面でもテンプレートを確認、ダウンロードすることが可能です。

作成後にARMテンプレートを確認 ARMテンプレートは複数のリソースをまとめて展開する場合や、同じリソースセットを複数の環境に展開する場合などに活用すると便利です。

なお、ARMテンプレートを使ってデプロイする場合は「カスタムテンプレートのデプロイ」を使います。

カスタムテンプレートのデプロイ

ARMテンプレートはリソースの構成情報を記述したJSONファイルで、リソース作成の繰り返し作業を効率化する

まとめ

今回はAzure Resource ManagerとARMテンプレートの仕組みについて解説しました。

ARMテンプレートは最初はとっつきにくいかもしれませんが、一度ひな型を作ってしまうと繰り返し利用できる他、チームで共有したり、バージョン管理できるメリットもありますので、Azureに慣れてきたらぜひチャレンジしてみてください。

個人的には読みやすいBicepやTerraformのほうが好み

AZ-900試験の対策としては「共通窓口」「繰り返し作業を効率化」の2点をおさえておきましょう。

それでは、また。

 

Azure入門コースを見る