다음을 통해 공유


ARM 템플릿의 출력 반복

이 문서에서는 ARM 템플릿(Azure Resource Manager 템플릿)에서 출력에 대한 값을 두 개 이상 만드는 방법을 보여줍니다. 템플릿의 출력 섹션에 복사 루프를 추가하면 배포하는 동안 여러 항목을 동적으로 반환할 수 있습니다.

리소스, 리소스의 속성변수와 함께 복사 루프를 사용할 수도 있습니다.

ARM 템플릿과 동일한 기능을 제공하고 구문이 사용하기 더 쉽기 때문에 Bicep를 권장합니다. 자세한 내용은 루프를 참조하세요.

구문

copy 요소를 템플릿의 출력 섹션에 추가하여 여러 항목을 반환합니다. 복사 요소의 일반적인 형식은 다음과 같습니다.

"copy": {
  "count": <number-of-iterations>,
  "input": <values-for-the-output>
}

count 속성은 출력 값에 대해 원하는 반복 횟수를 지정합니다.

input 속성은 반복할 속성을 지정합니다. input 속성의 값에서 생성된 요소 배열을 만듭니다. 단일 속성(예: 문자열) 또는 여러 속성이 있는 개체일 수 있습니다.

복사 제한

개수는 800개를 초과할 수 없습니다.

개수는 음수가 될 수 없습니다. 최신 버전의 Azure CLI, PowerShell 또는 REST API를 사용하여 템플릿을 배포하는 경우에는 0이 될 수 있습니다. 특히 다음을 사용해야 합니다.

  • Azure PowerShell 2.6 이상
  • Azure CLI 2.0.74 이상
  • REST API 버전 2019-05-10 이상
  • 연결된 배포는 배포 리소스 유형에 API 버전 2019-05-10 이상을 사용해야 합니다.

이전 버전의 PowerShell, CLI 및 REST API는 개수에 0을 지원하지 않습니다.

출력 반복

다음 예제에서는 다양한 수의 스토리지 계정을 만들고 각 스토리지 계정에 대한 엔드포인트를 반환합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageCount": {
      "type": "int",
      "defaultValue": 2
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[parameters('storageCount')]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}{1}', copyIndex(), variables('baseName'))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ],
  "outputs": {
    "storageEndpoints": {
      "type": "array",
      "copy": {
        "count": "[parameters('storageCount')]",
        "input": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
      }
    }
  }
}

이전 템플릿은 다음 값을 가진 배열을 반환합니다.

[
  "https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
  "https://1storagecfrbqnnmpeudi.blob.core.windows.net/"
]

다음 예제에서는 새 스토리지 계정에서 세 가지 속성을 반환합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageCount": {
      "type": "int",
      "defaultValue": 2
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[length(range(0, parameters('storageCount')))]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}{1}', range(0, parameters('storageCount'))[copyIndex()], variables('baseName'))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ],
  "outputs": {
    "storageInfo": {
      "type": "array",
      "copy": {
        "count": "[length(range(0, parameters('storageCount')))]",
        "input": {
          "id": "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', copyIndex(), variables('baseName')))]",
          "blobEndpoint": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]",
          "status": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).statusOfPrimary]"
        }
      }
    }
  }
}

앞의 예제에서는 다음 값을 가진 배열을 반환합니다.

[
  {
    "id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/0storagecfrbqnnmpeudi",
    "blobEndpoint": "https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
    "status": "available"
  },
  {
    "id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/1storagecfrbqnnmpeudi",
    "blobEndpoint": "https://1storagecfrbqnnmpeudi.blob.core.windows.net/",
    "status": "available"
  }
]

다음 단계