연습 - Azure Resource Manager 템플릿에 매개 변수 및 출력 추가
이 연습에서는 배포하는 동안 Azure 스토리지 계정 이름을 정의하는 매개 변수를 추가합니다. 그런 다음 허용되는 스토리지 계정 SKU를 정의하고 이 배포에 사용할 것을 정의하는 매개 변수를 추가합니다. 또한 배포 프로세스에서 나중에 사용할 수 있는 출력을 추가하여 ARM 템플릿(Azure Resource Manager 템플릿)에 유용성을 더합니다.
ARM 템플릿의 매개 변수 만들기
여기서는 런타임에 설정할 수 있는 매개 변수를 추가하여 ARM 템플릿의 유연성을 높입니다. storageName
값의 매개 변수를 만듭니다.
Visual Studio Code의 azuredeploy.json 파일에서 parameters 특성의 괄호 안에 커서를 놓습니다. 이는
"parameters":{},
와 같습니다.Enter 키를 선택하고 par을 입력합니다. 관련된 코드 조각 목록이 표시됩니다. 템플릿에 제네릭 매개 변수를 추가하는 new-parameter를 선택합니다. 이 예제와 비슷합니다.
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
매개 변수를 parameter1에서 storageName으로 변경하고 유형을 문자열로 유지합니다. minLength 값 3과 maxLength 값 24를 추가합니다. Azure 스토리지 리소스 이름의 설명 값을 추가합니다.
이제 매개 변수 블록은 다음 예제와 같이 표시됩니다.
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
name
및displayName
값에서 둘 다resources
블록에 새 매개 변수를 사용합니다. 전체 파일은 다음 코드 예제와 같이 표시됩니다.{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS" } } ], "outputs": {} }
파일을 저장합니다.
매개 변수가 있는 ARM 템플릿 배포
여기에서 해당 배포가 수행하는 작업을 더 잘 반영하도록 배포 이름을 변경하고 새 매개 변수의 값을 입력합니다.
터미널에서 다음 Azure CLI 명령을 실행합니다. 코드 조각은 이전에 사용한 것과 동일한 코드이지만, 배포 이름이 변경되었습니다. storageName
매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 앞 단원에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today
az deployment group create \
--name $DeploymentName \
--template-file $templateFile \
--parameters storageName={your-unique-name}
터미널에서 다음 Azure PowerShell 명령을 실행합니다. 코드 조각은 이전에 사용한 것과 동일한 코드이지만, 배포 이름이 변경되었습니다. storageName
매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 앞 단원에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.
$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
-Name $deploymentName `
-TemplateFile $templateFile `
-storageName {your-unique-name}
배포 확인
배포가 완료되면 브라우저의 Azure Portal로 돌아갑니다. 리소스 그룹으로 이동하고 이제 세 개의 성공한 배포가 있는지 확인합니다. 해당 링크를 선택합니다.
세 개의 배포가 모두 목록에 있습니다.
앞에서 살펴본 것처럼 addnameparameter 배포를 살펴봅니다.
허용되는 값을 제한하는 다른 매개 변수 추가
여기에서 매개 변수를 사용하여 매개 변수의 허용되는 값을 제한합니다.
storageName
매개 변수의 닫는 괄호 뒤에 커서를 놓습니다. 쉼표를 추가하고 Enter 키를 선택합니다.다시 par을 입력하고 new-parameter를 선택합니다.
새 제네릭 매개 변수를 다음 코드로 변경합니다.
"storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] }
여기에서 해당 매개 변수가 허용할 값을 나열합니다. 허용되지 않는 값으로 템플릿이 실행되면 배포에 실패합니다.
해당 매개 변수에 주석을 추가합니다.
ARM 템플릿은
//
및/* */
주석을 지원합니다.storageSKU
매개 변수를 사용하도록 resources를 업데이트합니다. Visual Studio Code에서 IntelliSense를 활용하는 경우 이 단계를 보다 쉽게 수행할 수 있습니다."sku": { "name": "[parameters('storageSKU')]" }
전체 파일은 다음 코드 예제와 같이 표시됩니다.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } }, "storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "[parameters('storageSKU')]" } } ], "outputs": {} }
파일을 저장합니다.
ARM 템플릿 배포
여기에서 허용 목록에 있는 storageSKU
매개 변수를 사용하여 성공적으로 배포합니다. 그런 다음 허용 목록에 없는 storageSKU
매개 변수를 사용하여 템플릿 배포를 시도합니다. 두 번째 배포는 예상대로 실패합니다.
다음 명령을 실행하여 템플릿을 배포합니다.
storageName
매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_GRS storageName={your-unique-name}
해당 배포를 완료합니다. 배포가 예상대로 성공합니다. 허용되는 값 목록으로 인해 템플릿의 사용자가 리소스에서 작동하지 않는 매개 변수 값을 전달할 수 없습니다. 잘못된 SKU를 제공하면 어떻게 되는지 살펴보겠습니다.
다음 명령을 실행하여 허용되지 않는 매개 변수로 템플릿을 배포합니다.
storageSKU
매개 변수를 Basic으로 변경했습니다.storageName
매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Basic storageName={your-unique-name}
해당 배포가 실패합니다. 오류를 확인합니다.
다음 명령을 실행하여 템플릿을 배포합니다.
storageName
매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_GRS
해당 배포를 완료합니다. 배포가 예상대로 성공합니다. 허용되는 값 목록으로 인해 템플릿의 사용자가 리소스에서 작동하지 않는 매개 변수 값을 전달할 수 없습니다. 잘못된 SKU를 제공하면 어떻게 되는지 살펴보겠습니다.
다음 명령을 실행하여 허용되지 않는 매개 변수로 템플릿을 배포합니다.
storageSKU
매개 변수를 Basic으로 변경했습니다.storageName
매개 변수의 고유한 이름을 입력합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Basic
해당 배포가 실패합니다. 오류를 확인합니다.
ARM 템플릿에 출력 추가
여기서는 ARM 템플릿의 outputs
섹션에 추가하여 스토리지 계정 리소스의 엔드포인트를 출력합니다.
Visual Studio Code의 azuredeploy.json 파일에서 outputs 특성
"outputs":{},
의 괄호 안에 커서를 놓습니다.Enter 키를 누른 다음 out을 입력합니다. 관련된 코드 조각 목록이 표시됩니다. new-output을 선택합니다. 이 예제와 같이 표시되는 템플릿에 제네릭 출력을 추가합니다.
"outputs": { "output1": { "type": "string", "value": "value" }
"output1"을 "storageEndpoint"로 변경한 다음
type
값을 "object"로 변경합니다.value
값을 "[reference(parameters('storageName')).primaryEndpoints]"로 변경합니다. 이 식은 앞 단원에서 설명한 엔드포인트 데이터를 가져오는 식입니다. object를 형식으로 지정했으므로 JSON 형식으로 개체가 반환됩니다."outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
파일을 저장합니다.
출력을 사용하여 ARM 템플릿 배포
여기서는 템플릿을 배포하고 엔드포인트 출력을 JSON으로 확인합니다. storageName
매개 변수의 고유한 이름을 입력해야 합니다. 이 이름은 모든 Azure에서 고유해야 합니다. 마지막 섹션에서 만든 고유한 이름을 사용할 수 있습니다. 이 경우 Azure는 새 리소스를 만드는 대신 리소스를 업데이트합니다.
다음 명령을 실행하여 템플릿을 배포합니다. {your-unique-name}을 고유한 문자열로 바꿔야 합니다.
templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addoutputs-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_LRS storageName={your-unique-name}
출력을 확인합니다.
다음 명령을 실행하여 템플릿을 배포합니다. {your-unique-name}을 고유한 문자열로 바꿔야 합니다.
$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addOutputs-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_LRS
출력을 확인합니다.
출력 배포 확인
Azure Portal에서 addOutputs 배포로 이동합니다. 여기에서 출력도 찾을 수 있습니다.