次の方法で共有


ARM テンプレートでの出力

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

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

ヒント

ARM テンプレートと同じ機能を備え、構文も使いやすいため、Bicep をお勧めします。 詳細については、「 出力」を参照してください。

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

出力値の定義

次の例は、デプロイされたリソースからプロパティを返す方法を示しています。

outputs セクションをテンプレートに追加します。 出力値は、パブリック 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]"
}

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

パブリック IP アドレス テンプレートは、パブリック IP アドレスを作成し、リソース ID を出力します。 ロードバランサーテンプレートは、前のテンプレートにリンクしています。 ロードバランサの作成時に出力のリソース ID を使用します。

テンプレートの例

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

{
  "$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() 関数では、アルファベット順でオブジェクトを並べ替えます。 他の場所では、元の順序を保持できます。 この非決定性のため、デプロイのパラメーターと出力と対話するコードを記述するときは、オブジェクト キーの順序について想定することは避けてください。

次のステップ