티스토리 뷰
<참조>
이전 자습서에서는 템플릿에 매개변수를 추가하여 템플릿을 개선하는 방법을 알아 보았다. 이번 자습서에서는 템플릿에 템플릿 함수를 추가하는 방법을 알아 본다. 함수를 사용하여 값을 동적으로 구성한다. 이러한 시스템 제공 템플릿 함수 외에도 사용자 정의 함수를 만들 수 있다.
필수 조건
Resource Manager Tools 확장이 포함된 Visual Studio Code 및 Azure PowerShell 또는 Azure CLI가 있어야 한다.
준비가 안되었다면, Azure 실습을 위한 Visual Studio Code 환경 구성과 Linux용 Windows 하위 시스템 설치를 참고하여 실습 준비를 마친다.
템플릿 검토
다음은 이전 자습서에서 활용한 템플릿이다.
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24 }, "storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] } }, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-04-01", "name": "[parameters('storageName')]", "location": "koreacentral", "sku": { "name": "[parameters('storageSKU')]" }, "kind": "StorageV2", "properties": { "supportsHttpsTrafficOnly": true } } ] } |
스토리지 계정의 위치는 koreacentral로 하드 코딩되어 있다. 하지만 스토리지 계정을 다른 지역에 배포해야 할 수도 있다. 유연성이 부족한 템플릿 문제가 다시 발생한다. 위치에 대한 매개변수를 추가할 수도 있겠지만, 기본값이 단지 하드 코딩된 값보다 더 의미가 있다면 매우 유용할 것이다.
함수 사용
이 시리즈의 이전 자습서를 완료했다면 이미 함수를 사용한 것이다. "[parameters('storageName')]" 를 추가할 때 parameters 함수를 사용했다. 대괄호는 대괄호 안의 구문이 템플릿 표현식임을 나타낸다. Resource Manager는 구문을 리터럴 값으로 처리하지 않고 구문을 분석한다.
함수는 배포 중에 값을 동적으로 가져와서 템플릿에 유연성을 추가한다. 이 자습서에서는 함수를 사용하여 배포에 사용 중인 리소스 그룹의 위치를 가져온다.
다음 예제는 location이라는 매개변수를 추가하기 위한 변경 사항을 강조 표시한다. 매개변수 기본값은 resourceGroup 함수를 호출한다. 이 함수는 배포에 사용되는 리소스 그룹에 대한 정보가 포함된 개체를 반환한다. 이러한 개체의 속성 중 하나가 위치 속성이다. 기본값을 사용하면, 스토리지 계정 위치는 리소스 그룹과 동일한 위치다. 리소스 그룹 내의 리소스는 동일한 위치를 공유하지 않아도 된다. 필요한 경우, 다른 위치를 제공할 수도 있다.
전체 파일을 복사하고 템플릿을 해당 콘텐츠로 바꾼다.
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24 }, "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]" } }, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-04-01", "name": "[parameters('storageName')]", "location": "[parameters('location')]", "sku": { "name": "[parameters('storageSKU')]" }, "kind": "StorageV2", "properties": { "supportsHttpsTrafficOnly": true } } ] } |
템플릿 배포
이 자습서에서는 리소스 그룹과 동일한 지역에 스토리지 계정이 만들어 진다. 위치에 기본값을 사용하기 때문에 해당 매개변수 값을 제공할 필요가 없다.
실습 디렉토리에서 탐색기 메뉴 중 Open with Code를 선택해 VS Code를 연다.
Ctrl + Shift + p를 누르고 화면 상단 터미널 선택 창에서 PowerShell Core를 선택하여 shell을 구동한다.
기존 powershell.ps1 이라는 파일을 이용하거나 새로 하나 생성하여 다음 코드를 붙여 넣는다.
위 함수 사용 섹션의 azuredeploy.json 코드도 기존 파일에 덮어 쓰거나 새로 하나 생성하여 붙여 넣는다.
$resourceGroup 이나 $templateFile은 각자 상황에 맞게 수정하고 -storageName의 값은 중복되지 않는 임의의 값으로 정해 입력해 준다.
참고로 이전 실습에서 생성되었던 리소스 그룹(zeroRG)은 모두 정리되었다고 가정하지만 정리가 안되었더라도 코드 실행과정에서 업데이트 여부를 물을 때 Y(기본값)를 눌러 진행하면 된다.
$location = "koreacentral" $resourceGroup = "zeroRG" New-AzResourceGroup -Name $resourceGroup -Location $location
$templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json" New-AzResourceGroupDeployment ` -Name addlocationparameter ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile ` -storageName "zerotempstorage" |
위 코드 전체를 선택하고 F8을 눌러 코드를 실행한다.
이상이 없다면 ProvisioningState가 Succeeded 상태로 확인 될 것이다.
PS C:\AzureDevOps-Excercise> $location = "koreacentral"
PS C:\AzureDevOps-Excercise> $resourceGroup = "zeroRG"
PS C:\AzureDevOps-Excercise> New-AzResourceGroup -Name $resourceGroup -Location $location
ResourceGroupName : zeroRG
Location : koreacentral
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/2e5d848e-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/zeroRG
PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
PS C:\AzureDevOps-Excercise> New-AzResourceGroupDeployment `
>> -Name addlocationparameter `
>> -ResourceGroupName $resourceGroup `
>> -TemplateFile $templateFile `
>> -storageName "zerotempstorage"
PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $location = "koreacentral"
PS C:\AzureDevOps-Excercise> $resourceGroup = "zeroRG"
PS C:\AzureDevOps-Excercise> New-AzResourceGroup -Name $resourceGroup -Location $location
ResourceGroupName : zeroRG
Location : koreacentral
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/2e5d848e-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/zeroRG
PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
PS C:\AzureDevOps-Excercise> New-AzResourceGroupDeployment `
>> -Name addlocationparameter `
>> -ResourceGroupName $resourceGroup `
>> -TemplateFile $templateFile `
>> -storageName "zerotempstorage"
DeploymentName : addlocationparameter
ResourceGroupName : zeroRG
ProvisioningState : Succeeded
Timestamp : 11/27/2019 1:31:11 PM
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
storageName String zerotempstorage
storageSKU String Standard_LRS
location String koreacentral
Outputs :
DeploymentDebugLogLevel :
PS C:\AzureDevOps-Excercise>
터미널 창 우측 셀렉트 박스에 wsl이 있다면 그것을 선택한다.
없다면, Select Default Shell을 선택한다. 상단에 wsl을 선택할 수 있도록 가용한 shell 리스트가 나열될 것이며 그 중에서 WSL Bash를 선택한다.
현재 실습 디렉토리 내 azurecli.azcli라는 파일을 만들고 다음 코드를 붙여 넣는다.
각자의 상황에 맞게 resourceGroup과 templateFile 등의 값을 수정하여 저장한다.
resourceGroup="zerobigRG" az group create \ |
위 코드 전체를 선택하고 Ctrl + '를 눌러 코드를 실행한다.
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ resourceGroup="zerobigRG"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ location="koreacentral"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group create \
> --resource-group $resourceGroup \
> --location $location
{
"id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG",
"location": "koreacentral",
"managedBy": null,
"name": "zerobigRG",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group deployment create \
> --name addlocationparameter \
> --resource-group $resourceGroup \
> --template-file $templateFile \
> --parameters storageName=zerobigtempstg
{
"id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Resources/deployments/addlocationparameter",
"location": null,
"name": "addlocationparameter",
"properties": {
"correlationId": "67713703-xxxx-xxxx-xxxx-7d3fbf87ec3a",
"debugSetting": null,
"dependencies": [],
"duration": "PT27.2635229S",
"mode": "Incremental",
"onErrorDeployment": null,
"outputResources": [
{
"id": "/subscriptions/2e5d848e-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Storage/storageAccounts/zerobigtempstg",
"resourceGroup": "zerobigRG"
}
],
"outputs": null,
"parameters": {
"location": {
"type": "String",
"value": "koreacentral"
},
"storageName": {
"type": "String",
"value": "zerobigtempstg"
},
"storageSKU": {
"type": "String",
"value": "Standard_LRS"
}
},
"parametersLink": null,
"providers": [
{
"id": null,
"namespace": "Microsoft.Storage",
"registrationPolicy": null,
"registrationState": null,
"resourceTypes": [
{
"aliases": null,
"apiVersions": null,
"capabilities": null,
"locations": [
"koreacentral"
],
"properties": null,
"resourceType": "storageAccounts"
}
]
}
],
"provisioningState": "Succeeded",
"template": null,
"templateHash": "3858399558986168868",
"templateLink": null,
"timestamp": "2019-11-27T13:32:53.436530+00:00"
},
"resourceGroup": "zerobigRG",
"type": "Microsoft.Resources/deployments"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
배포 확인
Azure Portal에서 리소스 그룹을 탐색하여 배포를 확인할 수 있다.
- Azure Portal에 로그인한다.
- 왼쪽 메뉴에서 리소스 그룹을 선택한다.
- 배포한 리소스 그룹을 선택한다.
- 스토리지 계정 리소스가 배포되었고 리소스 그룹과 동일한 위치에 있는 것을 볼 수 있다.
리소스 정리
다음 자습서로 이동하는 경우에는 리소스 그룹을 삭제할 필요가 없다.
지금 중지하는 경우에는 리소스 그룹을 삭제하여 배포된 리소스를 정리하는 것이 좋다.
- Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택한다.
- 이름으로 필터링 필드에서 리소스 그룹 이름을 입력한다.
- 해당 리소스 그룹 이름을 선택한다.
- 위쪽 메뉴에서 리소스 그룹 삭제를 선택한다.
'Azure와 함께 하는 DevOps' 카테고리의 다른 글
07 Azure Portal에서 내보낸 템플릿 사용 (0) | 2019.12.05 |
---|---|
06 Resource Manager 템플릿에 변수와 출력 추가 (0) | 2019.12.02 |
04 Resource Manager 템플릿에 매개변수 추가 (0) | 2019.11.25 |
03 Resource Manager 템플릿에 리소스 추가 (0) | 2019.11.20 |
01 Azure 실습을 위한 Visual Studio Code 환경 구성 (0) | 2019.11.14 |