다음을 통해 공유


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

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

필수 조건

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

Resource Manager 도구 확장이 있는 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": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-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": "2021-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를 사용하고, 리소스 이름에 dev를 접두사로 사용하고 Environment 태그를 Dev로 설정합니다.

다시, 다음 내용이 포함된 새 파일을 만듭니다. 이 파일을 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 태그를 Production으로 설정합니다. 실제 프로덕션 환경에서는 무료가 아닌 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에 템플릿을 배포하는 방법에 대한 이 소개를 완료했습니다. 의견이나 제안 사항이 있으면 사용자 의견 섹션에서 알려주십시오.

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