演習 - リンクされた、および入れ子になった ARM テンプレートをデプロイする

完了

Note

初めてサンドボックスをアクティブ化して利用規約に同意すると、Microsoft アカウントが Microsoft Learn サンドボックスという名前の新しい Azure ディレクトリに関連付けられます。 あなたはコンシェルジェ サブスクリプションという名前の特殊なサブスクリプションに追加されます。

ここでは、指定されたサンドボックス環境に、2 つのリンクされたテンプレートを含むテンプレートをデプロイします。

この演習では、Visual Studio Code 用 Azure Resource Manager ツールを使用します。 この拡張機能を必ず Visual Studio Code にインストールしてください。

指定された Azure サンドボックス サブスクリプションを使用してテスト環境を設定する

このユニットで各デプロイを実行するには、Visual Studio Code ターミナルから Azure アカウントにサインインする必要があります。

サンドボックスをアクティブ化したのと同じアカウントにサインインしていることを確認してください。

Azure にサインインする

  1. Visual Studio Code のターミナルから次のコマンドを実行して、Azure にサインインします。 このコマンドを実行すると、ブラウザーが開き、アカウントにサインインできます。

    Connect-AzAccount
    
  2. サインインすると、このアカウントに関連付けられているサブスクリプションの一覧がターミナルに表示されます。 サンドボックスをアクティブにしている場合、このリストにコンシェルジェ サブスクリプションが含まれています。

  3. サブスクリプション ID を取得します。 次のコマンドを実行すると、ご利用のサブスクリプションとその ID が、読みやすい表形式で一覧表示されます。 サブスクリプション ID は 2 番目の列です。 Concierge Subscription を探し、2 番目の列をコピーします。 これは、cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0 のように表示されます。

    Get-AzSubscription
    
  4. アクティブなサブスクリプションをコンシェルジェ サブスクリプションに変更します。 必ず、{Your subscription ID} を、前のコマンドで取得したコンシェルジェ サブスクリプションの ID に置き換えてください。

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

既定のリソース グループを設定する

次に、サンドボックスで自分用に作成したリソース グループを、既定のリソース グループとして設定する必要があります。 この操作を実行するには、最初に、次のコマンドを使用してリソース グループを取得する必要があります。

Get-AzResourceGroup

このコマンドでは、前のコマンドから取得したリソースの名前を使用します これは、learn-a73131a1-b618-48b8-af70-21af7ca420c4 のように表示されます。 このコマンドを使用すると、この演習の残りの Azure PowerShell コマンドでそのパラメーターを省略できます。

Note

通常、PowerShell または Azure CLI コマンドを使用してテンプレートをデプロイする場合、ターゲットのリソース グループ名を指定する必要があります。 このモジュールの演習では、デプロイのコンテキストを設定すると、この要件をバイパスしています。 次の手順では、PowerShell コマンド Set-AzDefault を使用してサンドボックスのリソース グループ名を指定しています。

Set-AzDefault -ResourceGroupName {Resource Group Name}

リンクされたテンプレートをデプロイする

この演習では、2 つのリンクされたテンプレートを含むテンプレートを確認してデプロイします。

  1. リンクされたテンプレートを ARM テンプレートに追加するには、Microsoft.Resources/deployments リソースと、テンプレートの場所で構成された templateLink プロパティを追加します。

  2. 次のサンプル テンプレートでは、2 つの変数によって、GitHub リポジトリ内にあるリモートまたは外部テンプレートが定義されていることに注目してください。

    テンプレートを確認し、リンクされたテンプレートのデプロイ先とデプロイ方法を定義する "type": "Microsoft.Resources/deployments" セクションに注意してください。

    1 つ目のリンクされたテンプレートでは、ストレージ アカウントをデプロイします。 これは、親パラメーターを使用して、ストレージ テンプレートをデプロイします。

    2 つ目のリンクされたテンプレートは、ストレージのデプロイに依存し、仮想ネットワーク テンプレートをデプロイするように構成されています。

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
        {
            "name": "storage",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        },
        {
            "name": "identity",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments','storage')]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template-2')]",
                    "contentVersion": "1.0.0.0"
                }
            }
        }
    ],
    "outputs": {}
    }
    
  3. 上記のテンプレートの内容をコピーして、ローカル ディレクトリ内のファイルに貼り付けます。 たとえば、C:\JSON\linkedtemplate.json を使用します。

  4. そのファイルをローカルに保存した後、次の PowerShell コマンドを使用して、前のユニットで説明したリソース グループ レベルでそれをデプロイできます。 つまり、New-AzResourceGroupDeployment を使用します。

        $templateFile="C:\JSON\linkedtemplate.json"
        $today=Get-Date -Format "MM-dd-yyyy"
        $DeploymentName="DeployLinkedTemplate-"+"$today"
    
        New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile
    

    完了すると、結果は次の例のようになります。

    リンクされたテンプレートをデプロイした結果。

  5. 結果を検証します。

    1. Azure portal にアクセスして、サンドボックス サブスクリプション内にいることを確認します。 それには、ページの右上隅にある自分のアバターを選択します。 [ディレクトリの切り替え] を選択します。 リストで、[Microsoft Learn サンドボックス] ディレクトリを選択します。

    2. 左側のパネルで、[リソース グループ] を選択します。

    3. [サンドボックス リソース グループ名] を選択します。

    4. [概要] 領域に、デプロイが成功したことが表示されます。 [3 Succeeded] (3 件の成功) を選択して、デプロイの詳細を確認します (前のユニットの演習を実行したかどうかによって、完了したデプロイ数が多くなる場合があります)。

    1 つのデプロイと成功の状態が表示されているデプロイの Azure portal インターフェイス。

    デプロイしたテンプレートは 1 つですが、portal の [デプロイ] ウィンドウには 3 つが一覧表示されていることに注目してください。 これらの 3 つのデプロイは、メイン テンプレートと 2 つのリンクされたテンプレートに対応します。

    リソースが表示されていない特定のデプロイの Azure portal インターフェイス。

Azure へのサインイン

  1. Visual Studio Code のターミナルから次のコマンドを実行して、Azure にサインインします。 このコマンドを実行すると、ブラウザーが開き、アカウントにサインインできます。

    az login
    
  2. サインインすると、このアカウントに関連付けられているサブスクリプションの JSON リストがターミナルに表示されます。 サンドボックスをアクティブにしている場合、このリストにコンシェルジェ サブスクリプションが含まれています。

  3. サブスクリプション ID を取得します。 次のコマンドを実行すると、ご使用のサブスクリプションとその ID が一覧表示されます。 サブスクリプション ID は 3 番目の列です。 Concierge Subscription を探し、3 番目の列をコピーします。 これは、cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0 のように表示されます。

    az account list -o table
    
  4. アクティブなサブスクリプションをコンシェルジェ サブスクリプションに変更します。 必ず、{Your subscription ID} を、前のコマンドで取得したコンシェルジェ サブスクリプションの ID に置き換えてください。

    az account set -s {Your subscription ID}
    

既定のリソース グループを設定する

次に、サンドボックスで自分用に作成したリソース グループを、既定のリソース グループとして設定する必要があります。 この操作を実行するには、最初に、次のコマンドを使用してリソース グループを取得する必要があります。

az group list -o table

このコマンドでは、前のコマンドから取得したリソース グループの名前を使用します (これは、learn-a73131a1-b618-48b8-af70-21af7ca420c4 のように表示されます)。この既定値を設定すると、この演習の残りの Azure CLI コマンドからそのパラメータを省略できます。

Note

通常、Azure CLI コマンドを使用してテンプレートをデプロイするときは、ターゲットの "リソース グループ" 名を指定する必要があります。 このモジュールの演習では、デプロイのコンテキストを設定すると、この要件をバイパスしています。 次の手順では、Azure CLI コマンド az configure を使用してサンドボックスのリソース グループ名を指定しています。

az configure --defaults group={Resource Group Name}

リンクされたテンプレートをデプロイする

この演習では、2 つのリンクされたテンプレートを含むテンプレートを確認してデプロイします。

  1. リンクされたテンプレートを ARM テンプレートに追加するには、Microsoft.Resources/deployments リソースと、テンプレートの場所で構成された templateLink プロパティを追加します。

  2. 次のサンプル テンプレートでは、2 つの変数によって、GitHub リポジトリ内にあるリモートまたは外部テンプレートが定義されていることに注目してください。

    テンプレートを確認し、リンクされたテンプレートのデプロイ先とデプロイ方法を定義する "type": "Microsoft.Resources/deployments" セクションに注意してください。

    1 つ目のリンクされたテンプレートでは、ストレージ アカウントをデプロイします。 これは、親パラメーターを使用して、ストレージ テンプレートをデプロイします。

    2 つ目のリンクされたテンプレートは、ストレージのデプロイに依存し、仮想ネットワーク テンプレートをデプロイするように構成されています。

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
      {
          "name": "storage",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template')]",
                  "contentVersion": "1.0.0.0"
              },
              "parameters": {
                  "location": { "value": "[resourceGroup().location]" }
              }
          }
      },
      {
          "name": "identity",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "dependsOn": [
              "[resourceId('Microsoft.Resources/deployments','storage')]"
          ],
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template-2')]",
                  "contentVersion": "1.0.0.0"
              }
          }
      }
    ],
    "outputs": {}
    }
    
  3. 上記のテンプレートの内容をコピーして、ローカル ディレクトリ内のファイルに貼り付けます。 たとえば、C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json を使用します。

  4. そのファイルをローカルに保存したら、次の Azure CLI コマンドを使用してリソース グループ レベルでそのファイルをデプロイします。 つまり、az deployment group create を使用します。

    templateFile=/mnt/c/Users/<UserName>/json/linkedtemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile
    

    完了したら、結果は次の例のようになります。 デプロイが成功したことを確実にするには、"provisioningState" の値を確認します。

    {- Finished ..
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-3-2020-08-19",
      "properties": {
        "correlationId": "f127f689-badf-4063-ad55-dff549e63e48",
        "debugSetting": null,
        "dependencies": [
          {
            "dependsOn": [
              {
                "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/storage",
                "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
                "resourceName": "storage",
                "resourceType": "Microsoft.Resources/deployments"
              }
            ],
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/identity",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
            "resourceName": "identity",
            "resourceType": "Microsoft.Resources/deployments"
          }
        ],
        "duration": "PT16.4639167S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Network/virtualNetworks/vnet-001",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          },
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          }
        ],
        "outputs": {},
        "parameters": {
          "name": {
            "type": "String",
            "value": "linkeddemo001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Resources",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  null
                ],
                "properties": null,
                "resourceType": "deployments"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12700491000282730217",
        "templateLink": null,
        "timestamp": "2020-08-19T21:07:18.729310+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    
  5. 結果を検証します。

    1. Azure portal にアクセスして、サンドボックス サブスクリプション内にいることを確認します。 それには、ページの右上隅にある自分のアバターを選択します。 [ディレクトリの切り替え] を選択します。 リストで、[Microsoft Learn サンドボックス] ディレクトリを選択します。

    2. 左側のパネルで、[リソース グループ] を選択します。

    3. [サンドボックス リソース グループ名] を選択します。

    4. [概要] 領域に、デプロイが成功したことが表示されます。 [3 Succeeded] (3 件の成功) を選択して、デプロイの詳細を確認します (前のユニットの演習を実行したかどうかによって、完了したデプロイ数が多くなる場合があります)。

    1 つのデプロイと成功の状態が表示されているデプロイの Azure portal インターフェイス。

    デプロイしたテンプレートは 1 つですが、portal の [デプロイ] ウィンドウには 3 つが一覧表示されていることに注目してください。 これらの 3 つのデプロイは、メイン テンプレートと 2 つのリンクされたテンプレートに対応します。

    リソースが表示されていない特定のデプロイの Azure portal インターフェイス。