次の方法で共有


ARM テンプレートでの出力

この記事では、Azure Resource Manager テンプレート (ARM テンプレート) で出力値を定義する方法について説明します。 デプロイされたリソースから値を返す必要がある場合に出力を使用します。

各出力値の形式は、 いずれかのデータ型に解決される必要があります。

ヒント

Bicep は ARM テンプレートと同じ機能を提供し、構文の方が使いやすいため、推奨されます。 詳細については、「 出力」を参照してください。

テンプレートの出力は 64 個に制限されています。 詳細については、 テンプレートの制限に関するページを参照してください。

出力値の定義

次の例は、デプロイされたリソースからプロパティを返す方法を示しています。 出力セクション テンプレートに追加します。 出力値は、パブリック IP アドレスの完全修飾ドメイン名を取得します。

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
  },
}

名前にハイフンが含まれているプロパティを出力する必要がある場合は、ドット表記ではなく、名前を角かっこで囲みます。 たとえば、['property-name'] の代わりに .property-name を使用します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "user": {
      "user-name": "Test Person"
    }
  },
  "resources": [
  ],
  "outputs": {
    "nameResult": {
      "type": "string",
      "value": "[variables('user')['user-name']]"
    }
  }
}

条件付き出力

condition 要素を使用して、条件付きで値を返すことができます。 通常、リソースを条件付きでデプロイした場合に条件付き出力を使用します。 次の例は、新しい IP アドレスがデプロイされたかどうかに基づいて、パブリック IP アドレスのリソース ID を条件付きで返す方法を示しています。

"outputs": {
  "resourceID": {
    "condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

条件付き出力の簡単な例については、 条件付き出力テンプレートを参照してください。

動的な出力の数

場合により、テンプレートの作成時に、返す必要がある値のインスタンスの数が不明なシナリオもあります。 反復出力を使用して、可変数の値を返すことができます。 copy要素を追加して出力を反復処理します。

"outputs": {
  "storageEndpoints": {
    "type": "array",
    "copy": {
      "count": "[parameters('storageCount')]",
      "input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
    }
  }
}

詳細については、 ARM テンプレートでの出力イテレーションを参照してください。

リンク済みテンプレート

リンクされたテンプレートを使用して、関連するテンプレートをデプロイできます。 リンクされたテンプレートから出力値を取得するには、親テンプレートの reference 関数を使用します。 親テンプレートの構文は次のとおりです。

"[reference('<deploymentName>').outputs.<propertyName>.value]"

次の例は、リンクされたテンプレートから値を取得して、ロード バランサーの IP アドレスを設定する方法を示しています。

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs.resourceID.value]"
}

プロパティ名にハイフンがある場合は、ドット表記ではなく名前を角かっこで囲みます。

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}

outputsセクションでreferenceを使用することはできません。 ネストされたテンプレートにデプロイされたリソースの値を返すには、ネストされたテンプレートをリンクされたテンプレートに変換します。

テンプレートの例

次のテンプレートでは、リソースはデプロイされません。 さまざまな型の出力を返す方法をいくつか示します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "stringOutput": {
      "type": "string",
      "value": "[deployment().name]"
    },
    "integerOutput": {
      "type": "int",
      "value": "[length(environment().authentication.audiences)]"
    },
    "booleanOutput": {
      "type": "bool",
      "value": "[contains(deployment().name, 'demo')]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[environment().authentication.audiences]"
    },
    "objectOutput": {
      "type": "object",
      "value": "[subscription()]"
    }
  }
}

出力値の取得

デプロイが成功すると、出力値はデプロイの結果で自動的に返されます。

デプロイ履歴から出力値を取得するには、スクリプトを使用できます。

(Get-AzResourceGroupDeployment `
  -ResourceGroupName <resource-group-name> `
  -Name <deployment-name>).Outputs.resourceID.value

出力内のオブジェクトを並べ替える

JSON では、オブジェクトは 0 個以上のキーと値のペアの順序付けられていないコレクションです。 順序付けは実装によって異なる可能性があります。 たとえば、Bicep items() 関数では、アルファベット順でオブジェクトを並べ替えます。 他の場所では、元の順序を保持できます。 この非決定性のため、デプロイのパラメーターと出力と対話するコードを記述するときは、オブジェクト キーの順序について想定することは避けてください。

次のステップ

出力に使用できるプロパティについては、 ARM テンプレートの構造と構文を参照してください。