ARM 템플릿 및 Azure Resource Manager REST API를 사용하여 리소스 배포

이 문서에서는 ARM 템플릿(Azure Resource Manager 템플릿)으로 Azure Resource Manager REST API를 사용하여 Azure에 리소스를 배포하는 방법을 설명합니다.

요청 본문 또는 파일 링크에는 템플릿을 포함할 수 있습니다. 템플릿을 사용할 경우 템플릿은 로컬 파일이거나 URI를 통해 사용 가능한 외부 파일일 수 있습니다. 템플릿이 스토리지 계정에 있는 경우, 템플릿에 대한 액세스를 제한하고 배포 중에 SAS(공유 액세스 서명) 토큰을 제공할 수 있습니다.

필요한 사용 권한

Bicep 파일 또는 ARM 템플릿을 배포하려면 배포하는 리소스에 대한 쓰기 액세스 및 Microsoft.Resources/deployments 리소스 형식의 모든 작업에 대한 액세스가 필요합니다. 예를 들어 가상 머신을 배포하려면 Microsoft.Compute/virtualMachines/writeMicrosoft.Resources/deployments/* 권한이 필요합니다. 가상 작업에는 동일한 사용 권한 요구 사항이 있습니다.

역할 및 사용 권한 목록은 Azure 기본 제공 역할을 참조하세요.

배포 범위

리소스 그룹, Azure 구독, 관리 그룹 또는 테넌트를 배포 대상으로 지정할 수 있습니다. 배포의 범위에 따라 다른 명령을 사용합니다.

이 문서의 예제에서는 리소스 그룹 배포를 사용합니다.

REST API를 사용하여 배포

  1. 인증 토큰을 포함하여 공통 매개 변수 및 헤더를 설정합니다.

  2. 존재하지 않는 리소스 그룹에 배포하는 경우 리소스 그룹을 만듭니다. 솔루션에 필요한 구독 ID, 새 리소스 그룹 이름 및 위치를 제공합니다. 자세한 내용은 리소스 그룹 만들기를 참조하세요.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
    

    다음과 같은 요청 본문을 사용합니다.

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. 템플릿을 배포하기 전에 템플릿이 환경에 적용할 변경사항을 미리 볼 수 있습니다. 가상 작업을 사용하여 템플릿이 예상대로 변경사항을 적용하는지 확인합니다. 가상 작업은 템플릿의 오류도 확인합니다.

  4. 템플릿을 배포하려면 요청 URI에 구독 ID, 리소스 그룹의 이름, 배포 이름을 제공합니다.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2020-10-01
    

    요청 본문에서 템플릿 및 매개 변수 파일에 대한 링크를 제공합니다. 매개 변수 파일에 대한 자세한 내용은 Resource Manager 매개 변수 파일 만들기를 참조하세요.

    mode증분으로 설정되어 있습니다. 전체 배포를 실행하려면 mode전체로 설정합니다. 이 완전한 모드를 사용할 때는 템플릿에 없는 리소스를 실수로 삭제할 수 있으므로 주의해야 합니다.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental"
     }
    }
    

    응답 컨텐츠, 요청 컨텐츠 또는 둘 다를 기록하려면 요청에 debugSetting를 포함합니다.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental",
       "debugSetting": {
         "detailLevel": "requestContent, responseContent"
       }
     }
    }
    

    공유 액세스 서명(SAS) 토큰을 사용하여 스토리지 계정을 설정할 수 있습니다. 자세한 내용은 공유 액세스 서명을 사용하여 액세스 위임을 참조하세요.

    매개 변수에 대해 중요한 값(예: 암호)을 제공해야 할 경우 해당 값을 주요 자격 증명 모음에 추가합니다. 앞의 예제에 표시된 대로 배포하는 동안 주요 자격 증명 모음을 검색합니다. 자세한 내용은 Azure Key Vault를 사용하여 배포 중에 보안 매개 변수 값 전달을 참조하세요.

  5. 템플릿 및 매개 변수의 파일에 연결하는 대신, 요청 본문에 포함할 수 있습니다. 다음 예에서는 인라인 템플릿 및 매개 변수가 지정된 요청 본문을 보여 줍니다.

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
         "contentVersion": "1.0.0.0",
         "parameters": {
           "storageAccountType": {
             "type": "string",
             "defaultValue": "Standard_LRS",
             "allowedValues": [
               "Standard_LRS",
               "Standard_GRS",
               "Standard_ZRS",
               "Premium_LRS"
             ],
             "metadata": {
               "description": "Storage Account type"
             }
           },
           "location": {
             "type": "string",
             "defaultValue": "[resourceGroup().location]",
             "metadata": {
               "description": "Location for all resources."
             }
           }
         },
         "variables": {
           "storageAccountName": "[format('{0}standardsa', uniquestring(resourceGroup().id))]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "apiVersion": "2022-09-01",
             "name": "[variables('storageAccountName')]",
             "location": "[parameters('location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. 템플릿 배포의 상태를 가져오려면 배포 - 가져오기를 사용합니다.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
    

ARMClient를 통해 배포

ARMClient는 Azure Resource Manager API를 호출하는 간단한 명령줄 도구입니다. 도구를 설치하려면 ARMClient를 참조하세요.

구독 나열:

armclient GET /subscriptions?api-version=2021-04-01

리소스 그룹 나열:

armclient GET /subscriptions/<subscription-id>/resourceGroups?api-version=2021-04-01

<subscription-id>를 해당하는 Azure 구독 ID로 바꿉니다.

미국 중부 지역에서 리소스 그룹을 만들 경우:

armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01  "{location: 'central us', properties: {}}"

또는 CreateRg.json이라는 JSON 파일에 본문을 넣을 수 있습니다.

{
  "location": "Central US",
  "properties": { }
}
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 '@CreateRg.json'

자세한 내용은 ARMClient: Azure API용 명령줄 도구를 참조하세요.

배포 이름

배치에 ExampleDeployment와 같은 이름을 지정할 수 있습니다.

배포를 실행할 때마다 리소스 그룹의 배포 기록에 항목이 배포 이름과 함께 추가됩니다. 다른 배포를 실행하고 동일한 이름을 지정하는 경우 이전 항목이 현재 배포로 바뀝니다. 배포 기록에서 고유한 항목을 유지하려면 각 배포에 고유한 이름을 지정합니다.

고유한 이름을 만들려면 임의의 번호를 할당하면 됩니다. 또는 날짜 값을 추가할 수 있습니다.

같은 배포 이름의 동일한 리소스 그룹에 동시 배포를 실행하는 경우 마지막 배포만 완료됩니다. 완료되지 않은 동일한 이름의 배포는 마지막 배포로 대체됩니다. 예를 들어 storage1이라는 스토리지 계정을 배포하는 newStorage라는 배포를 실행하는 동시에 storage2라는 스토리지 계정을 배포하는 newStorage라는 다른 배포를 실행하는 경우 스토리지 계정을 하나만 배포합니다. 결과 스토리지 계정의 이름은 storage2입니다.

그러나 storage1이라는 스토리지 계정을 배포하는 newStorage라는 배포를 실행하고 배포가 완료된 직후에 storage2라는 스토리지 계정을 배포하는 newStorage라는 다른 배포를 실행하면 두 개의 스토리지 계정이 배포됩니다. 하나는 storage1이고 다른 하나는 storage2입니다. 그러나 배포 기록에는 하나의 항목만 기록됩니다.

각 배포에 고유한 이름을 지정하는 경우 충돌 없이 동시에 실행할 수 있습니다. storage1이라는 스토리지 계정을 배포하는 newStorage1이라는 배포를 실행하는 동시에 storage2라는 스토리지 계정을 배포하는 newStorage2라는 다른 배포를 실행하면 두 개의 스토리지 계정이 배포되고 배포 기록에 두 개의 항목이 기록됩니다.

동시 배포와의 충돌을 방지하고 배포 기록에서 고유한 항목이 기록되게 하려면 각 배포에 고유한 이름을 지정합니다.

다음 단계