Azure Resource Manager テンプレート構造を探索する

完了

このユニットでは、Azure Resource Manager テンプレート (ARM テンプレート) を使用して、Infrastructure as Code を実装する方法について説明します。 ARM テンプレートのセクションを調査して、ARM テンプレートを Azure にデプロイする方法を学習し、ARM テンプレートの resources セクションを掘り下げて調べます。

Infrastructure as Code とは

"コードとしてのインフラストラクチャ" を使うと、アプリケーションに必要なインフラストラクチャを、コードによって記述できます。

Infrastructure as Code を使用すると、アプリケーション コードと、アプリケーションをデプロイするために必要なすべてのものを中央のコード リポジトリで管理できます。 Infrastructure as Code の利点は次のとおりです。

  • 一貫性のある構成
  • スケーラビリティの向上
  • 迅速なデプロイ
  • 追跡可能性の向上

このビデオでは、コードとしてのインフラストラクチャについて説明します。

ARM テンプレートとは

ARM テンプレートは、デプロイのインフラストラクチャと構成を定義する JavaScript Object Notation (JSON) ファイルです。 このテンプレートでは、宣言型の構文を使用します。 宣言型の構文は、制御フローを記述せずに、リソースがどのように見えるかを示す構造と要素を構築する方法です。 宣言型の構文は、コンピューターが実行するコマンドを使用する命令型の構文とは異なります。 命令型スクリプトは、リソースのデプロイにおける各手順の指定に重点を置いています。

ARM テンプレートでは、作成のための一連のプログラミング コマンドを記述しなくても、デプロイ対象を宣言できます。 ARM テンプレートでは、リソースとそのリソースのプロパティを指定します。 その後 Azure Resource Manager はその情報が使用して、整理された一貫した方法でリソースをデプロイします。

ARM テンプレートを使用する利点

ARM テンプレートを使用すると、デプロイを自動化し、Infrastructure as Code (IaC) のプラクティスを使用することができます。 テンプレート コードは、インフラストラクチャと開発プロジェクトの一部になります。 アプリケーション コードと同様に、IaC ファイルをソース リポジトリに格納してバージョン管理できます。

ARM テンプレートはべき等です。つまり、同じテンプレートを何度もデプロイし、同じリソースの種類を同じ状態で取得できます。

リソースが正しい順序で作成されるように、Resource Manager によってリソースのデプロイが調整されます。 可能な場合は、リソースも並行して作成されるため、ARM テンプレートのデプロイの方がスクリプト化されたデプロイよりも短時間で完了します。

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process scripts.

Resource Manager には、組み込みの検証もあります。 これによりデプロイを開始する前にテンプレートがチェックされ、デプロイが確実に成功するようにします。

デプロイがより複雑になった場合は、ARM テンプレートをより小さい再利用可能なコンポーネントに分割できます。 デプロイ時にこれらの小さいテンプレートをまとめてリンクすることができます。 また、テンプレートを他のテンプレート内に入れ子にすることもできます。

Azure portal で、デプロイ履歴を確認し、デプロイの状態に関する情報を取得できます。 ポータルには、すべてのパラメーターの値と出力が表示されます。

また、ARM テンプレートを Azure Pipelines のような継続的インテグレーションおよび継続的デプロイ (CI/CD) ツールに統合することもでき、これにより、リリース パイプラインを自動化し、高速で信頼性の高いアプリケーションとインフラストラクチャの更新が可能になります。 Azure DevOps と ARM テンプレートのタスクを使用することで、プロジェクトを継続的にビルドしてデプロイできます。

ARM テンプレート ファイル構造

ARM テンプレートを作成するときは、テンプレートを構成するすべての部分、およびその役割を理解しておく必要があります。 ARM テンプレート ファイルは、次の要素で構成されています。

要素 説明
schema JSON データの構造を記述する JSON スキーマ ファイルの場所を定義する必須セクションです。 使用するバージョン番号は、デプロイのスコープと JSON エディターによって異なります。
contentVersion テンプレートのバージョン (1.0.0.0 など) を定義する必須セクションです。 この値を使用して、テンプレートの重要な変更を文書化することで、適切なテンプレートを確実にデプロイできます。
apiProfile リソースの種類の API バージョンのコレクションを定義する省略可能セクションです。 この値を使用することで、テンプレート内のリソースごとに API バージョンを指定する必要がなくなります。
parameters デプロイ時に指定される値を定義する省略可能なセクションです。 これらの値は、コマンドライン パラメーターまたは Azure portal で、パラメーター ファイルによって指定できます。
variables テンプレート言語式を簡略化するために使用される値を定義する省略可能セクションです。
functions テンプレート内で使用可能なユーザー定義関数を定義できる省略可能セクションです。 テンプレートで複雑な式が繰り返し使用される場合、 ユーザー定義関数を使用すると、テンプレートを簡略化できます。
resources リソース グループまたはサブスクリプションで、デプロイまたは更新する必要がある実際の項目を定義する必須セクションです。
output デプロイの最後に返される値を指定する省略可能セクションです。

ARM テンプレートを Azure にデプロイする

次のいずれかの方法で、ARM テンプレートを Azure にデプロイできます。

  • ローカル テンプレートをデプロイする
  • リンクされたテンプレートをデプロイする
  • 継続的配置パイプラインでデプロイする

このモジュールでは、ローカル ARM テンプレートのデプロイに焦点を当てます。 今後の Learn モジュールでは、さらに複雑なインフラストラクチャをデプロイする方法と、Azure Pipelines と統合する方法について説明します。

ローカル テンプレートをデプロイするには、Azure PowerShell または Azure CLI のいずれかをローカルにインストールしている必要があります。

まず、Azure CLI または Azure PowerShell を使用して Azure にサインインします。

az login

次に、リソース グループを定義します。 既に定義されているリソース グループを使用することも、次のコマンドを使用して、新規に作成することもできます。 使用可能な場所の値は、az account list-locations (CLI) または Get-AzLocation (PowerShell) から取得できます。 az configure --defaults location=<location> を使用して、既定の場所を構成できます。

az group create \
  --name {name of your resource group} \
  --location "{location}"

リソース グループでテンプレートのデプロイを開始するには、Azure CLI コマンドの az deployment group create または Azure PowerShell コマンドの New-AzResourceGroupDeployment を使用します。

ヒント

az deployment group createaz group deployment create の違いは、az group deployment create が非推奨となる古いコマンドであり、az deployment group create に置き換えられるということです。 そのため、az deployment group create を使用してリソース グループのスコープにリソースをデプロイすることをお勧めします。

どちらのコマンドでも、デプロイ履歴で簡単に識別できるように、リソース グループ、リージョン、デプロイの名前が必要です。 便宜上、この演習では、テンプレート ファイルのパスを格納する変数を作成します。 この変数により、デプロイのたびにパスを再入力する必要がないため、デプロイ コマンドの実行が簡単になります。 次に例を示します。

このデプロイ コマンドを実行するには、最新バージョンの Azure CLI が必要です。

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

複雑なソリューションのデプロイには、リンクされたテンプレートを使用します。 テンプレートを多数のテンプレートに分割し、メイン テンプレートからこれらのテンプレートをデプロイできます。 メイン テンプレートをデプロイすると、リンクされたテンプレートのデプロイがトリガーされます。 SAS トークンを使用すると、リンクされたテンプレートを格納し、セキュリティで保護できます。

CI/CD パイプラインにより、ARM テンプレート プロジェクトを含む開発プロジェクトの作成とデプロイが自動化されます。 テンプレートのデプロイに使用される最も一般的な 2 つのパイプラインは、Azure Pipelines または GitHub Actions です。

この 2 種類のデプロイの詳細については、他のモジュールで取り上げます。

テンプレートにリソースを追加する

テンプレートにリソースを追加するには、リソース プロバイダーとそのリソースの種類を把握しておく必要があります。 この組み合わせの構文は、{resource-provider}/{resource-type} の形式になります。 たとえば、テンプレートにストレージ アカウント リソースを追加するには、Microsoft.Storage リソース プロバイダーが必要です。 このプロバイダーの種類の 1 つは storageAccount です。 そのため、リソースの種類は Microsoft.Storage/storageAccounts と表示されます。 Azure サービスのリソース プロバイダーの一覧を使用して、必要なプロバイダーを見つけることができます。

プロバイダーとリソースの種類を定義したら、使用する各リソースの種類のプロパティを理解する必要があります。 詳細については、「Azure Resource Manager テンプレートにリソースを定義する」を参照してください。 左側の列のリストを表示して、リソースを見つけます。 プロパティが API バージョン別に並べ替えられていることに注意してください。

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

[ストレージ アカウント] ページに一覧表示されるいくつかのプロパティの例を次に示します。

Screenshot of a Microsoft documentation page showing some of the storage account properties.

このストレージの例では、テンプレートは次のようになります。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}