ARM 템플릿을 사용 하 여 리소스 배포 및 Azure PowerShellDeploy resources with ARM templates and Azure PowerShell

ARM (Azure Resource Manager) 템플릿과 함께 Azure PowerShell를 사용 하 여 Azure에 리소스를 배포 하는 방법을 알아봅니다.Learn how to use Azure PowerShell with Azure Resource Manager (ARM) templates to deploy your resources to Azure. Azure 솔루션 배포 및 관리의 개념에 대 한 자세한 내용은 템플릿 배포 개요를 참조 하세요.For more information about the concepts of deploying and managing your Azure solutions, see template deployment overview.

배포 범위Deployment scope

리소스 그룹, 구독, 관리 그룹 또는 테 넌 트에 대 한 배포를 대상으로 지정할 수 있습니다.You can target your deployment to a resource group, subscription, management group, or tenant. 대부분의 경우 리소스 그룹에 대 한 배포를 대상으로 합니다.In most cases, you'll target deployment to a resource group. 더 큰 범위에서 정책 및 역할 할당을 적용 하려면 구독, 관리 그룹 또는 테 넌 트 배포를 사용 합니다.To apply policies and role assignments across a larger scope, use subscription, management group, or tenant deployments. 구독에 배포 하는 경우 리소스 그룹을 만들고 여기에 리소스를 배포할 수 있습니다.When deploying to a subscription, you can create a resource group and deploy resources to it.

배포의 범위에 따라 다른 명령을 사용 합니다.Depending on the scope of the deployment, you use different commands.

리소스 그룹에 배포 하려면 AzResourceGroupDeployment를 사용 합니다.To deploy to a resource group, use New-AzResourceGroupDeployment:

New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>

구독에 배포 하려면 AzSubscriptionDeployment를 사용 합니다.To deploy to a subscription, use New-AzSubscriptionDeployment:

New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-template>

구독 수준 배포에 대 한 자세한 내용은 구독 수준에서 리소스 그룹 및 리소스 만들기를 참조 하세요.For more information about subscription level deployments, see Create resource groups and resources at the subscription level.

관리 그룹에 배포 하려면 AzManagementGroupDeployment를 사용 합니다.To deploy to a management group, use New-AzManagementGroupDeployment.

New-AzManagementGroupDeployment -Location <location> -TemplateFile <path-to-template>

관리 그룹 수준 배포에 대 한 자세한 내용은 관리 그룹 수준에서 리소스 만들기를 참조 하세요.For more information about management group level deployments, see Create resources at the management group level.

테 넌 트에 배포 하려면 AzTenantDeployment를 사용 합니다.To deploy to a tenant, use New-AzTenantDeployment.

New-AzTenantDeployment -Location <location> -TemplateFile <path-to-template>

테 넌 트 수준 배포에 대 한 자세한 내용은 테 넌 트 수준에서 리소스 만들기를 참조 하세요.For more information about tenant level deployments, see Create resources at the tenant level.

이 문서의 예제에서는 리소스 그룹 배포를 사용 합니다.The examples in this article use resource group deployments.

전제 조건Prerequisites

배포할 템플릿이 필요 합니다.You need a template to deploy. 아직 없는 경우 Azure 빠른 시작 템플릿 리포지토리에서 예제 템플릿을 다운로드 하 고 저장 합니다.If you don't already have one, download and save an example template from the Azure Quickstart templates repo. 이 문서에 사용된 로컬 파일 이름은 c:\MyTemplates\azuredeploy.json입니다.The local file name used in this article is c:\MyTemplates\azuredeploy.json.

Azure Cloud Shell를 사용 하 여 템플릿을 배포 하지 않는 한 Azure PowerShell를 설치 하 고 Azure에 연결 해야 합니다.Unless you use the Azure Cloud Shell to deploy templates, you need to install Azure PowerShell and connect to Azure:

로컬 템플릿 배포Deploy local template

다음 예제에서는 리소스 그룹을 만들고 로컬 컴퓨터에서 템플릿을 배포 합니다.The following example creates a resource group, and deploys a template from your local machine. 리소스 그룹의 이름은 영숫자, 마침표, 밑줄, 하이픈 및 괄호만 포함할 수 있습니다.The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. 최대 90자까지 가능합니다.It can be up to 90 characters. 마침표로 끝날 수 없습니다.It can't end in a period.

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json

배포가 완료될 때까지 몇 분 정도 걸릴 수 있습니다.The deployment can take a few minutes to complete.

원격 템플릿 배포Deploy remote template

ARM 템플릿을 로컬 컴퓨터에 저장 하는 대신 외부 위치에 저장 하는 것이 좋습니다.Instead of storing ARM templates on your local machine, you may prefer to store them in an external location. 원본 제어 리포지토리(예: GitHub)에 템플릿을 저장할 수 있습니다.You can store templates in a source control repository (such as GitHub). 또는 조직에서 공유 액세스에 대한 Azure Storage 계정에 저장할 수 있습니다.Or, you can store them in an Azure storage account for shared access in your organization.

외부 템플릿을 배포 하려면 템플릿 uri 매개 변수를 사용 합니다.To deploy an external template, use the TemplateUri parameter. 예제의 URI를 사용하여 GitHub에서 샘플 템플릿을 배포합니다.Use the URI in the example to deploy the sample template from GitHub.

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

앞의 예제에서는 템플릿에 중요한 데이터가 포함되어 있지 않으므로 대부분의 시나리오에 적합한 이 템플릿에 대해 공개적으로 액세스할 수 있는 URI가 필요합니다.The preceding example requires a publicly accessible URI for the template, which works for most scenarios because your template shouldn't include sensitive data. 중요한 데이터(예: 관리자 암호)를 지정해야 하는 경우 해당 값을 안전한 매개 변수로 전달합니다.If you need to specify sensitive data (like an admin password), pass that value as a secure parameter. 그러나 템플릿에 공개적으로 액세스할 수 있도록 하지 않으려면 프라이빗 스토리지 컨테이너에 저장하여 보호할 수 있습니다.However, if you don't want your template to be publicly accessible, you can protect it by storing it in a private storage container. SAS(공유 액세스 서명) 토큰이 필요한 템플릿을 배포하는 데 관한 내용은 SAS 토큰으로 프라이빗 템플릿 배포를 참조하세요.For information about deploying a template that requires a shared access signature (SAS) token, see Deploy private template with SAS token. 자습서를 진행 하려면 자습서: ARM 템플릿 배포의 Azure Key Vault 통합을 참조 하세요.To go through a tutorial, see Tutorial: Integrate Azure Key Vault in ARM template deployment.

Azure Cloud Shell에서 배포Deploy from Azure Cloud Shell

Azure Cloud Shell을 사용하여 템플릿을 배포할 수 있습니다.You can use the Azure Cloud Shell to deploy your template. 외부 템플릿을 배포하려면 템플릿의 URI를 제공합니다.To deploy an external template, provide the URI of the template. 로컬 템플릿을 배포하려면 먼저 Cloud Shell용 스토리지 계정에 템플릿을 로드해야 합니다.To deploy a local template, you must first load your template into the storage account for your Cloud Shell. 셸에 파일을 업로드하려면 셸 창에서 파일 업로드/다운로드 메뉴 아이콘을 선택합니다.To upload files to the shell, select the Upload/Download files menu icon from the shell window.

Cloud shell을 열려면로 https://shell.azure.com이동 하거나 다음 코드 섹션에서 시도 를 선택 합니다.To open the Cloud shell, browse to https://shell.azure.com, or select Try-It from the following code section:

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

셸에 코드를 붙여넣으려면 셸 내부를 마우스 오른쪽 단추로 클릭하고 붙여넣기를 선택합니다.To paste the code into the shell, right-click inside the shell and then select Paste.

매개 변수 값 전달Pass parameter values

매개 변수 값을 전달하려면 인라인 매개 변수 또는 매개 변수 파일을 사용할 수 있습니다.To pass parameter values, you can use either inline parameters or a parameter file.

인라인 매개 변수입니다.Inline parameters

인라인 매개 변수를 전달하려면 New-AzResourceGroupDeployment 명령을 사용하여 매개 변수 이름을 제공합니다.To pass inline parameters, provide the names of the parameter with the New-AzResourceGroupDeployment command. 예를 들어, 문자열 및 배열을 템플릿에 전달하려면 다음을 사용합니다.For example, to pass a string and array to a template, use:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleString "inline string" `
  -exampleArray $arrayParam

파일의 콘텐츠를 가져와서 해당 콘텐츠를 인라인 매개 변수로 제공할 수도 있습니다.You can also get the contents of file and provide that content as an inline parameter.

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

파일에서 매개 변수 값을 가져오면 구성 값을 제공해야 하는 경우에 유용합니다.Getting a parameter value from a file is helpful when you need to provide configuration values. 예를 들어, Linux 가상 머신에 대한 Cloud-Init 값을 제공할 수 있습니다.For example, you can provide cloud-init values for a Linux virtual machine.

개체의 배열을 전달 해야 하는 경우 PowerShell에서 해시 테이블을 만들고 배열에 추가 합니다.If you need to pass in an array of objects, create hash tables in PowerShell and add them to an array. 배포 하는 동안 해당 배열을 매개 변수로 전달 합니다.Pass that array as a parameter during deployment.

$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleArray $subnetArray

매개 변수 파일Parameter files

매개 변수를 스크립트에 인라인 값으로 전달하는 것보다는, 매개 변수 값이 포함된 JSON 파일을 사용하는 것이 더 쉬울 수 있습니다.Rather than passing parameters as inline values in your script, you may find it easier to use a JSON file that contains the parameter values. 매개 변수 파일은 로컬 파일이거나 액세스 가능한 URI가 있는 외부 파일일 수 있습니다.The parameter file can be a local file or an external file with an accessible URI.

매개 변수 파일에 대 한 자세한 내용은 리소스 관리자 매개 변수 파일 만들기를 참조 하세요.For more information about the parameter file, see Create Resource Manager parameter file.

로컬 매개 변수 파일을 전달하려면 TemplateParameterFile 매개 변수를 사용합니다.To pass a local parameter file, use the TemplateParameterFile parameter:

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -TemplateParameterFile c:\MyTemplates\storage.parameters.json

외부 매개 변수 파일을 전달하려면 TemplateParameterUri 매개 변수를 사용합니다.To pass an external parameter file, use the TemplateParameterUri parameter:

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.parameters.json

템플릿 배포 테스트Test template deployments

실제로 리소스를 배포 하지 않고 템플릿 및 매개 변수 값을 테스트 하려면 AzResourceGroupDeployment을 사용 합니다.To test your template and parameter values without actually deploying any resources, use Test-AzResourceGroupDeployment.

Test-AzResourceGroupDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json -storageAccountType Standard_GRS

오류가 감지되지 않으면 명령은 응답 없이 완료됩니다.If no errors are detected, the command finishes without a response. 오류가 감지되면 명령은 오류 메시지를 반환합니다.If an error is detected, the command returns an error message. 예를 들어, 스토리지 계정 SKU에 대해 잘못된 값을 전달하면 다음 오류가 반환됩니다.For example, passing an incorrect value for the storage account SKU, returns the following error:

Test-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json -storageAccountType badSku

Code    : InvalidTemplate
Message : Deployment template validation failed: 'The provided value 'badSku' for the template parameter 'storageAccountType'
          at line '15' and column '24' is not valid. The parameter value is not part of the allowed value(s):
          'Standard_LRS,Standard_ZRS,Standard_GRS,Standard_RAGRS,Premium_LRS'.'.
Details :

템플릿에 구문 오류가 있는 경우 명령은 템플릿을 구문 분석할 수 없다는 오류를 반환합니다.If your template has a syntax error, the command returns an error indicating it couldn't parse the template. 메시지는 줄 번호 및 구문 분석 오류의 위치를 나타냅니다.The message indicates the line number and position of the parsing error.

Test-AzResourceGroupDeployment : After parsing a value an unexpected character was encountered: 
  ". Path 'variables', line 31, position 3.

다음 단계Next steps