Share via


チュートリアル:ARM テンプレートに出力を追加する

このチュートリアルでは、Azure Resource Manager テンプレート (ARM テンプレート) から値を返す方法について説明します。 デプロイしたリソースの値が必要なときは出力を使用します。 このチュートリアルの所要時間は 7 分です。

前提条件

必須ではありませんが、変数に関するチュートリアルを済ませておくことをお勧めします。

Visual Studio Code と Resource Manager ツールの拡張機能、そして Azure PowerShell または Azure CLI のいずれかを使用する必要があります。 詳細については、テンプレートのツールに関する記事を参照してください。

テンプレートを確認する

前のチュートリアルで完成したテンプレートには、次の JSON が含まれていました。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

ストレージ アカウントはデプロイされますが、そのストレージ アカウントに関する情報は返されません。 新しいリソースのプロパティを後で参照できるようキャプチャしなければならない場合があります。

出力を追加する

テンプレートから値を返すには出力を使用します。 たとえば、新しいストレージ アカウントのエンドポイントを取得して利用することが考えられます。

以下の例では、テンプレートに出力値を追加するために行った変更箇所が強調表示されています。 ファイル全体をコピーして、既存のテンプレートの内容を置き換えてください。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

追加した出力値については、注目すべき重要な事柄がいくつかあります。

返される値の型は object に設定されています。これは JSON オブジェクトが返されることを意味します。

ストレージ アカウントの実行時の状態を取得するために、reference 関数が使用されています。 リソースの実行時の状態を取得するには、リソースの名前または ID を渡します。 このケースでは、ストレージ アカウントの名前を作成する際に使用した変数を使用します。

最後に、ストレージ アカウントの primaryEndpoints プロパティを返します。

テンプレートのデプロイ

それではテンプレートをデプロイして、返される値を見てみましょう。

まだリソース グループを作成していない場合は、「リソース グループの作成」を参照してください。 この例では、templateFile 変数にテンプレート ファイルのパスが設定済みであることを想定しています (1 つ目のチュートリアルを参照)。

New-AzResourceGroupDeployment `
  -Name addoutputs `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storagePrefix "store" `
  -storageSKU Standard_LRS

デプロイ コマンドの出力では、出力が JSON 形式の場合にのみ、次の例のようなオブジェクトが表示されます。

{
    "dfs": "https://storeluktbfkpjjrkm.dfs.core.windows.net/",
    "web": "https://storeluktbfkpjjrkm.z19.web.core.windows.net/",
    "blob": "https://storeluktbfkpjjrkm.blob.core.windows.net/",
    "queue": "https://storeluktbfkpjjrkm.queue.core.windows.net/",
    "table": "https://storeluktbfkpjjrkm.table.core.windows.net/",
    "file": "https://storeluktbfkpjjrkm.file.core.windows.net/"
}

注意

デプロイに失敗した場合は、verbose スイッチを使用して、作成しているリソースに関する情報を取得します。 デバッグの詳細については、debug スイッチを使用してください。

作業を振り返る

ここまでの 6 つのチュートリアルでは、多くのことを行いました。 少し作業内容を振り返って見ましょう。 簡単に渡すことのできるパラメーターを使ってテンプレートを作成しました。 テンプレートはカスタマイズできるほか、必要な値が動的に作成されるため、異なる環境で再利用することができます。 そこからストレージ アカウントに関する情報を取得し、スクリプトで使用することもできます。

それでは、リソース グループとデプロイ履歴を見てみましょう。

  1. Azure portal にサインインします。

  2. 左側のメニューから [リソース グループ] を選択します。

  3. デプロイ先のリソース グループを選択します。

  4. 実施した手順によっては、リソース グループに少なくとも 1 つ (場合によっては複数) のストレージ アカウントが存在するはずです。

  5. また履歴には、いくつかの成功したデプロイが表示されます。 そのリンクを選択します。

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

  6. 実行したすべてのデプロイが履歴に表示されます。 addoutputs というデプロイを選択します。

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

  7. 入力内容を確認します。

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

  8. 出力内容を確認します。

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

  9. テンプレートを確認します。

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

リソースをクリーンアップする

次のチュートリアルに移動する場合は、リソース グループを削除する必要はありません。

ここで終了する場合は、リソース グループを削除してかまいません。

  1. Azure portal で、左側のメニューから [リソース グループ] を選択します。
  2. [任意のフィールドのフィルター...] テキスト フィールドにリソース グループ名を入力します。
  3. myResourceGroup の横にあるチェック ボックスをオンにし、[myResourceGroup] またはご自分のリソース グループ名を選びます。
  4. トップ メニューから [リソース グループの削除] を選択します。

次のステップ

このチュートリアルでは、テンプレートに戻り値を追加しました。 次のチュートリアルでは、テンプレートをエクスポートして、その一部を自分のテンプレートに使用する方法を説明します。