다음을 통해 공유


자습서: 매개 변수 파일을 사용하여 Azure Resource Manager 템플릿 배포

이 자습서에서는 매개 변수 파일을 사용하여 배포 중에 전달한 값을 저장하는 방법을 알아봅니다. 이전 자습서에서는 배포 명령과 함께 인라인 매개 변수를 사용했습니다. 이 방법은 ARM 템플릿(Azure Resource Manager 템플릿)을 테스트하는 데 사용되었지만 배포를 자동화할 때 환경에 대한 값 집합을 전달하는 것이 더 쉬울 수 있습니다. 매개 변수 파일을 사용하면 특정 환경에 대한 매개 변수 값을 더 쉽게 패키지할 수 있습니다. 이 자습서에서는 개발 및 프로덕션 환경을 위한 매개 변수 파일을 만듭니다. 이 명령을 완료하는 데 12분 이 걸립니다.

필수 조건

태그에 대한 자습서를 완료하는 것이 좋지만 필수는 아닙니다.

Visual Studio Code와 Azure PowerShell 또는 Azure CLI가 있어야 합니다. 자세한 내용은 템플릿 도구를 참조하세요.

템플릿 검토

템플릿에는 배포 중에 제공할 수 있는 많은 매개 변수가 있습니다. 이전 자습서의 끝에 템플릿에는 다음 JSON 파일이 있습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    },
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "Base name of the resource such as web app name and app service plan "
      },
      "minLength": 2
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    },
    "resourceTags": {
      "type": "object",
      "defaultValue": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2025-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2025-03-01",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[parameters('appServicePlanName')]"
      ],
      "tags": "[parameters('resourceTags')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

이 템플릿은 잘 작동하지만 이제 템플릿에 대해 전달하는 매개 변수를 쉽게 관리하려고 합니다.

매개 변수 파일 추가

매개 변수 파일은 템플릿과 비슷한 구조의 JSON 파일입니다. 파일에서 배포하는 동안 전달하려는 매개 변수 값을 제공합니다.

매개 변수 파일 내에서 템플릿의 매개 변수에 대한 값을 제공합니다. 매개 변수 파일의 각 매개 변수 이름은 템플릿의 매개 변수 이름과 일치해야 합니다. 이름은 대/소문자를 구분하지 않지만, 일치하는 값을 쉽게 확인하려면 템플릿에서 대/소문자를 일치시키는 것이 좋습니다.

모든 매개 변수에 대한 값을 제공할 필요는 없습니다. 지정되지 않은 매개 변수에 기본값이 있는 경우 해당 값은 배포 중에 사용됩니다. 매개 변수에 기본값이 없고 매개 변수 파일에 지정되지 않은 경우 배포 중에 값을 제공하라는 메시지가 표시됩니다.

매개 변수 파일에서 템플릿의 매개 변수 이름과 일치하지 않는 매개 변수 이름을 지정할 수 없습니다. 알 수 없는 매개 변수를 제공하면 오류가 발생합니다.

Visual Studio Code에서 다음 콘텐츠를 사용하여 새 파일을 만듭니다. azuredeploy.parameters.dev.json이름으로 파일을 저장합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "devstore"
    },
    "storageSKU": {
      "value": "Standard_LRS"
    },
    "appServicePlanName": {
      "value": "devplan"
    },
    "webAppName": {
      "value": "devapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  }
}

이 파일은 개발 환경에 대한 매개 변수 파일입니다. 스토리지 계정에 Standard_LRS 사용하고, 개발 접두사를 사용하여 리소스 이름을 지정하고, 태그를 EnvironmentDev로 설정합니다.

다시 다음 내용으로 새 파일을 만듭니다. azuredeploy.parameters.prod.json이름으로 파일을 저장합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "contosodata"
    },
    "storageSKU": {
      "value": "Standard_GRS"
    },
    "appServicePlanName": {
      "value": "contosoplan"
    },
    "webAppName": {
      "value": "contosowebapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Production",
        "Project": "Tutorial"
      }
    }
  }
}

이 파일은 프로덕션 환경에 대한 매개 변수 파일입니다. 스토리지 계정에 Standard_GRS 사용하고, contoso 접두사를 사용하여 리소스 이름을 지정하고, 태그를 Environment프로덕션으로 설정합니다. 실제 프로덕션 환경에서는 무료 이외의 SKU에서 앱 서비스를 사용하려고 하지만 이 자습서에서는 해당 SKU를 사용합니다.

템플릿 배포

Azure CLI 또는 Azure PowerShell을 사용하여 템플릿을 배포합니다.

템플릿의 최종 테스트로, 개발 환경에 대해 하나씩, 프로덕션 환경에 대해 하나씩 두 개의 새 리소스 그룹을 만들어 보겠습니다.

템플릿 및 매개변수 변수의 경우, {path-to-the-template-file}, {path-to-azuredeploy.parameters.dev.json}, {path-to-azuredeploy.parameters.prod.json} 및 중괄호 {}를 템플릿 및 매개변수 파일 경로로 바꾸세요.

먼저 개발 환경에 배포해 보겠습니다.

$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
  -Name myResourceGroupDev `
  -Location "East US"
New-AzResourceGroupDeployment `
  -Name devenvironment `
  -ResourceGroupName myResourceGroupDev `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

이제 프로덕션 환경에 배포합니다.

$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
  -Name myResourceGroupProd `
  -Location "West US"
New-AzResourceGroupDeployment `
  -Name prodenvironment `
  -ResourceGroupName myResourceGroupProd `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

비고

배포가 실패한 경우, verbose 스위치를 사용하여 생성 중인 리소스에 대한 정보를 확인하십시오. 스위치를 debug 사용하여 디버깅에 대한 자세한 정보를 가져옵니다.

배포 확인

Azure Portal에서 리소스 그룹을 탐색하여 배포를 확인할 수 있습니다.

  1. Azure Portal에 로그인합니다.
  2. 왼쪽 메뉴에서 리소스 그룹을 선택합니다.
  3. 이 자습서에서 배포하는 두 개의 새 리소스 그룹이 표시됩니다.
  4. 리소스 그룹 중 하나를 선택하고 배포된 리소스를 봅니다. 해당 환경의 매개 변수 파일에 지정한 값과 일치합니다.

자원을 정리하세요

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택합니다.

  2. 확인란 옆에 있는 하이퍼링크 리소스 그룹 이름을 선택합니다. 이 시리즈를 완료하면 삭제할 세 개의 리소스 그룹(myResourceGroup, myResourceGroupDevmyResourceGroupProd)이 있습니다.

  3. 위쪽 메뉴에서 리소스 그룹 삭제 아이콘을 선택합니다.

    주의

    리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다.

  4. 표시되는 팝업 창에 리소스 그룹 이름을 입력하고 삭제를 선택합니다.

다음 단계

축하합니다. 이 소개를 완료하여 Azure에 템플릿을 배포했습니다. 피드백 섹션에 의견과 제안이 있는지 알려주세요.

다음 자습서 시리즈에서는 템플릿 배포에 대해 자세히 설명합니다.