ARM 템플릿의 리소스 선언

Azure Resource Manager 템플릿 (ARM 템플릿)을 통해 리소스를 배포하려면 리소스 선언을 추가합니다. JSON 템플릿에서 resources 배열을 사용합니다.

languageVersion 2.0은 리소스 선언을 배열에서 개체로 변경하는 등 ARM JSON 템플릿에 대한 향상된 기능 목록을 만듭니다. 이 문서에 표시된 대부분의 샘플은 여전히 배열을 사용합니다 resources . languageVersion 2.0 관련 정보는 기호 이름 사용을 참조하세요.

참고 항목

Visual Studio Code용 Azure Resource Manager 도구 확장의 현재 릴리스에서는 languageVersion 2.0의 향상된 기능을 인식하지 못합니다.

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

템플릿의 리소스는 800개로 제한됩니다. 자세한 내용은 템플릿 제한을 참조하세요.

리소스 유형 및 버전 설정

템플릿에 리소스를 추가하는 경우 리소스 유형 및 API 버전을 설정하여 시작합니다. 이러한 값은 리소스에 사용할 수 있는 다른 속성을 결정합니다.

다음 예제에서는 스토리지 계정에 리소스 유형 및 API 버전을 설정하는 방법을 보여 줍니다. 예제에는 전체 리소스 선언이 표시되지 않습니다.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

리소스 이름 설정

각 리소스는 하나의 이름을 갖습니다. 리소스 이름을 설정할 때, 리소스 이름에 대한 규칙 및 제한 사항에 주의하십시오.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

위치 설정

많은 리소스에는 위치가 필요합니다. 리소스에 intellisense 또는 템플릿 참조를 통해 위치가 필요한지 여부를 판단할 수 있습니다. 다음 예제에서는 스토리지 계정에 사용되는 위치 매개 변수를 추가합니다.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

자세한 내용은 ARM 템플릿에서 리소스 위치 설정을 참조하세요.

태그 설정

배포 중 리소스에 태그를 적용할 수 있습니다. 태그를 통해 배포된 리소스를 논리적으로 구성할 수 있습니다. 태그를 지정할 수 있는 다양한 방법의 예는 ARM 템플릿 태그를 참조하세요.

리소스 관련 속성 설정

위의 속성은 대부분의 리소스 형식에 대해 일반적입니다. 이러한 값을 설정한 후에는 배포하고 있는 리소스 유형과 관련된 속성을 설정해야 합니다.

Intellisense 또는 템플릿 참조를 사용하여 사용 가능한 속성과 필요한 속성을 판단합니다. 다음 예제에서는 스토리지 계정에 나머지 속성을 설정합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

기호 이름 사용

Bicep에서 각 리소스 정의에는 기호 이름이 있습니다. 기호 이름을 사용하여 Bicep 파일의 다른 부분에 있는 리소스를 참조할 수 있습니다. ARM JSON 템플릿에서 기호 이름을 지원하려면 버전 2.0 이상을 사용하여 languageVersion을 추가하고 리소스 정의를 배열에서 개체로 변경합니다. 템플릿에 대해 languageVersion을 지정하는 경우 루트 수준 리소스에 대해 기호 이름을 지정해야 합니다. 예시:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

위의 JSON은 다음 JSON에 기록될 수 있습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

기호 이름은 대/소문자를 구분합니다. 기호 이름에 허용되는 문자는 문자, 숫자 및 _입니다. 기호 이름은 템플릿에서 고유해야 하지만 템플릿의 변수 이름, 매개 변수 이름 및 출력 이름과 겹칠 수 있습니다. 다음 예제에서는 스토리지 계정 리소스의 기호 이름이 출력과 같은 이름을 둡니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

참조 함수는 앞의 예제와 같이 리소스의 기호 이름을 사용할 수 있습니다. 참조 함수는 더 이상 리소스의 이름을 사용할 수 없습니다. 예를 들어 reference(parameters('storageAccountName')) 허용되지 않습니다.

배포 리소스가 기호 이름 배포에 사용되는 경우 apiVersion 2020-09-01 이상을 사용합니다.

기존 리소스 선언

리소스 선언에 languageVersion 2.0 및 기호 이름을 사용하여 기존 리소스를 선언할 수 있습니다. "existing": true의 최상위 리소스 속성은 다음 예제와 같이 리소스를 배포하는 대신 ARM을 읽게 합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

기존 리소스는 type, apiVersionname 이외의 속성을 정의할 필요가 없습니다.

다음 단계