次の方法で共有


ARM テンプレートとは

クラウドへの移行に伴い、多くのチームがアジャイル開発手法を採用しました。 このようなチームでは反復が迅速に行われます。 ソリューションをクラウドに繰り返しデプロイし、インフラストラクチャが信頼できる状態であることを把握する必要があります。 インフラストラクチャが反復プロセスの一部となったことで、運用と開発の区分はなくなりました。 チームは、統合されたプロセスを通してインフラストラクチャとアプリケーション コードを管理する必要があります。

これらの課題に対応するために、デプロイを自動化し、コードとしてのインフラストラクチャのプラクティスを使用します。 コードでは、デプロイする必要があるインフラストラクチャを定義します。 インフラストラクチャ コードはプロジェクトの一部です。 アプリケーション コードと同様に、インフラストラクチャ コードをソース リポジトリに保存してバージョン管理を行います。 チーム内の誰でもコードを実行して、同様の環境をデプロイできます。

Azure ソリューション用にインフラストラクチャをコードとして実装するには、Azure Resource Manager テンプレート (ARM テンプレート) を使用します。 テンプレートは、プロジェクトのインフラストラクチャと構成を定義する JavaScript Object Notation (JSON) ファイルです。 このテンプレートでは、デプロイしようとしているものを、それを作成する一連のプログラミング コマンドを記述しなくても記述できる、宣言型の構文を使用しています。 このテンプレートでは、デプロイするリソースとそれらのリソースのプロパティを指定します。 また、これらのリソースをデプロイするリソース グループを指定することもできます。

ヒント

ARM テンプレートと同じ機能を提供するが構文がより使いやすい、Bicep という名前の新しい言語が導入されました。 各 Bicep ファイルは、デプロイ中に自動で ARM テンプレートに変換されます。 "コードとしてのインフラストラクチャ" のオプションを検討している場合は、Bicep を候補に入れることをお勧めします。 詳細については、「Bicep とは」を参照してください。

ARM テンプレートを選択する理由

ARM テンプレートを使用するか、他のいずれかのコードとしてのインフラストラクチャ サービスを使用するか決めるときに、テンプレートを使用した場合の以下の長所を考慮してください。

  • 宣言型の構文:ARM テンプレートを使用すると、Azure インフラストラクチャ全体を宣言方式で作成し、デプロイできます。 たとえば、仮想マシンだけでなく、ネットワーク インフラストラクチャ、ストレージ システム、その他の必要なリソースもデプロイできます。

  • 反復可能結果:インフラストラクチャを開発のライフサイクル全体で繰り返しデプロイし、常に一貫性のある方法でリソースをデプロイします。 テンプレートはべき等です。つまり、同じテンプレートを何度でもデプロイし、同じリソースの種類を同じ状態で作成できます。 更新を提示する個別のテンプレートをたくさん開発するのではなく、望ましい状態を提示するテンプレートを 1 つ開発できます。 たとえば、次のファイルはストレージ アカウントを作成します。 このテンプレートをデプロイし、指定したプロパティを持つストレージ アカウントが既に存在する場合、変更は行われません。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "mystore": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-04-01",
      "name": "mystorageaccount",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    }
  }
}
  • オーケストレーション:複雑な順序付けのことを心配する必要はありません。 Resource Manager では、相互に依存するリソースのデプロイが調整され、正しい順序で作成されます。 Resource Manager では、可能な場合にはリソースが並列デプロイされます。そのため、直列デプロイに比べ、短時間でデプロイが完了します。 テンプレートは複数の命令コマンドではなく、1 つのコマンドを使用してデプロイします。

    命令型デプロイと宣言型デプロイの違いを示す図。

  • モジュール式のファイル:テンプレートは再利用可能な構成部品に細分化し、デプロイ時にリンクさせることができます。 あるテンプレートを別のテンプレート内の入れ子にすることもできます。

  • Azure リソースの作成:テンプレートでは、Azure の新しいサービスと機能をすぐに利用できます。 リソース プロバイダーによって新しいリソースが導入されたらすぐに、テンプレートを使用してこれらのリソースをデプロイできます。 新しいサービスは、ツールやモジュールが更新されるまで待たなくても使用することができます。

  • 拡張性: デプロイ スクリプトでは、PowerShell または Bash スクリプトをテンプレートに追加できます。 デプロイ スクリプトを使用すると、デプロイ時にリソースを設定する機能が拡張されます。 スクリプトは、テンプレートに含めることも、外部ソースに格納してテンプレート内で参照することもできます。 デプロイ スクリプトを使用すると、1 つの ARM テンプレートでエンドツーエンド環境のセットアップを完了できます。

  • テスト: テンプレートが推奨ガイドラインに従っていることを確認するには、ARM テンプレート ツール キット (arm-ttk) を使用してテストします。 このテスト キットは PowerShell スクリプトであり、GitHub からダウンロードできます。 このツール キットを使用すると、テンプレート言語を使用して、より簡単に専門知識を開発できます。

  • 変更のプレビュー: テンプレートをデプロイする前に、What-If 操作を使用して変更をプレビューします。 What-If を使用すると、作成、更新、または削除するリソースと、変更するリソース プロパティを確認できます。 what-if 操作により、環境の現在の状態が確認され、状態を管理する必要がなくなります。

  • 組み込みの検証:テンプレートは検証に合格しないとデプロイされません。 Resource Manager によって、デプロイ開始前にテンプレートが調べられ、デプロイが成功することが確認されます。 デプロイが半分完了した状態で停止する可能性が低くなります。

  • デプロイの追跡:Azure portal でデプロイ履歴を確認し、テンプレートのデプロイに関する情報を取得できます。 デプロイされたテンプレート、渡されたパラメーター値、およびすべての出力値を確認できます。 他のコードとしてのインフラストラクチャ サービスは、ポータルでは追跡されません。

    デプロイ履歴を示す Azure portal のスクリーンショット。

  • コードとしてのポリシー:Azure Policy は、ガバナンスを自動化するためのコード フレームワークとしてのポリシーです。 Azure ポリシーを使用している場合、テンプレート経由でデプロイすると、非準拠リソースではポリシーが修復されます。

  • デプロイのブループリント:Microsoft が提供するブループリントを活用することで、規制やコンプライアンスの基準を満たすことができます。 これらのブループリントには、さまざまなアーキテクチャ用の事前構築済みテンプレートが含まれています。

  • CI/CD 統合: テンプレートを継続的インテグレーションと継続的デプロイ (CI/CD) ツールに統合できます。 この統合により、迅速で信頼性の高いアプリケーションとインフラストラクチャの更新のためのリリース パイプラインが自動化されます。 Azure DevOps と Resource Manager テンプレート タスクを使うことで、Azure Pipelines を使用して ARM テンプレート プロジェクトを継続的にビルドおよびデプロイすることができます。 詳細については、パイプラインを使用した VS プロジェクトに関するページおよび「チュートリアル: Azure Pipelines を使用した Azure Resource Manager テンプレートの継続的インテグレーション」を参照してください。

  • エクスポート可能なコード: リソース グループの現在の状態をエクスポートするか、特定のデプロイに使用されたテンプレートを表示すると、既存のリソース グループのテンプレートを取得できます。 エクスポートしたテンプレートを表示すると、テンプレートの構文について理解するのに役立ちます。

  • 作成ツール:Visual Studio Code とテンプレート ツール拡張機能でテンプレートを作成できます。 IntelliSense、構文の強調表示、インライン ヘルプ、その他多くの言語機能を利用できます。 Visual Studio Code に加えて、Visual Studio を使用することもできます。

テンプレート ファイル

テンプレート内では、JSON の機能を拡張するテンプレート式を記述できます。 これらの式では、Resource Manager が提供する関数が使用されます。

テンプレートには次のセクションがあります。

  • パラメーター - 同じテンプレートを使用するときに、さまざまな環境に合わせてカスタマイズする値をデプロイ時に指定します。

  • 変数 - テンプレートで再利用する値を定義します。 これらはパラメーター値から構築できます。

  • ユーザー定義関数 - テンプレートを簡略化するカスタマイズされた関数を作成します。

  • リソース - デプロイするリソースを指定します。

  • 出力 - デプロイされたリソースから値を返します。

テンプレートのデプロイ手順

テンプレートをデプロイするときは、Resource Manager によってテンプレートが REST API 操作に変換されます。 たとえば、Resource Manager が次のリソース定義を含むテンプレートを受け取ったとします。

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "mystorageaccount",
    "location": "centralus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2"
  },
]

定義が次の REST API 操作に変換され、Microsoft.Storage リソース プロバイダーに送信されます。

PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2022-09-01
REQUEST BODY
{
  "location": "centralus",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

リソースに対してテンプレートで設定された apiVersion が、REST 操作の API バージョンとして使用されていることに注意してください。 テンプレートを繰り返しデプロイしても、引き続き正常に動作することが保証されます。 同じ API バージョンを使用することで、新しいバージョンで導入される可能性がある破壊的変更について気にする必要はなくなります。

テンプレートをデプロイするには、次のいずれかのオプションを使用します。

テンプレートの設計

ソリューションの管理方法に基づいて、テンプレートとリソース グループを定義します。 たとえば、1 つのリソース グループに 1 つのテンプレートで 3 層のアプリケーションをデプロイできます。

単一のテンプレートを使った 3 層アプリケーションのデプロイを示す図。

インフラストラクチャ全体を 1 つのテンプレートで定義する必要はありません。 多くの場合、対象を絞って目的を特化した一連のテンプレートにデプロイの要件を分類することが合理的です。 これらのテンプレートは、さまざまなソリューションで簡単に再利用できます。 特定のソリューションをデプロイするには、必要なすべてのテンプレートをリンクするメイン テンプレートを作成します。 次の画像は、入れ子になった 3 つのテンプレートを含む親テンプレートを利用して 3 層のソリューションをデプロイする方法を示しています。

入れ子になったテンプレートを使った 3 層アプリケーションのデプロイを示す図。

層ごとに異なるライフサイクルを希望する場合は、3 層を個別のリソース グループにデプロイできます。 その場合でも、リソースを他のリソース グループ内のリソースにリンクできます。

別々のリソース グループを使った 3 層アプリケーションのデプロイを示す図。

入れ子になったテンプレートについては、「Azure Resource Manager でのリンクされたテンプレートの使用」を参照してください。

テンプレートの共有

テンプレートは、作成した後で組織内の他のユーザーと共有することができます。 テンプレート スペックでは、テンプレートをリソースの種類として保管することができます。 テンプレート スペックへのアクセスを管理するには、ロールベースのアクセス制御を使用します。テンプレート スペックへの読み取りアクセス権を持つユーザーはテンプレートをデプロイできますが、変更することはできません。

つまり、このアプローチでは組織の標準を満たすテンプレートを安全に共有できます。

サポートを受ける

Azure Resource Manager (ARM) テンプレートに関連する問題のサポート チケットを開くための手順を次に示します。

  1. Azure Portalを開きます。

  2. 右上隅にある [サポートとトラブルシューティング] アイコンを選択します。

  3. [問題の簡単な説明を入力してください] に「ARM テンプレート」と入力し、[進む] を選択します。

  4. [問題が発生しているサービスはどれですか?] で、[監視と管理] の下にある [ポータル] を選択し、[次へ] を選択します。

  5. サブスクリプションを選択し、 [次へ] を選択します。

  6. [ARM テンプレートに関する問題] を選択し、[次へ] を選択します。

    ARM テンプレートのサポートを要求する場合のスクリーンショット。

次のステップ