Azure Resource Manager 템플릿의 복사 루프에서 개체를 매개 변수로 사용
ARM 템플릿(Azure Resource Manager 템플릿)에서 개체를 매개 변수로 사용하는 경우 복사 루프에 포함할 수 있습니다. 이 기술은 특히 자식 리소스를 배포하는 경우 직렬 복사 루프와 결합할 때 매우 유용합니다.
이 접근 방식을 다루기 위해 2개의 보안 규칙과 함께 NSG(네트워크 보안 그룹)를 배포하는 템플릿을 살펴보겠습니다.
먼저, 매개 변수를 살펴보겠습니다. 템플릿을 확인하면 securityRules
배열이 포함된 networkSecurityGroupsSettings
매개변수 하나를 정의한 것을 볼 수 있습니다. 이 배열에는 각 보안 규칙을 정의하는 설정을 지정하는 두 JSON 개체가 있습니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters":{
"networkSecurityGroupsSettings": {
"value": {
"securityRules": [
{
"name": "RDPAllow",
"description": "allow RDP connections",
"direction": "Inbound",
"priority": 100,
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "10.0.0.0/24",
"sourcePortRange": "*",
"destinationPortRange": "3389",
"access": "Allow",
"protocol": "Tcp"
},
{
"name": "HTTPAllow",
"description": "allow HTTP connections",
"direction": "Inbound",
"priority": 200,
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "10.0.1.0/24",
"sourcePortRange": "*",
"destinationPortRange": "80",
"access": "Allow",
"protocol": "Tcp"
}
]
}
}
}
}
이제 템플릿을 살펴보겠습니다. NSG를 배포하는 NSG1
리소스가 있습니다. 또한 ARM의 기본 제공 속성 반복 기능도 사용합니다. 템플릿에서 리소스의 속성 섹션에 복사 루프를 추가하여 배포 중에 속성의 항목 수를 동적으로 설정할 수 있습니다. 템플릿 구문을 반복하지 않아도 됩니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"VNetSettings": {
"type": "object"
},
"networkSecurityGroupsSettings": {
"type": "object"
}
},
"resources": [
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('VNetSettings').name]",
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('VNetSettings').addressPrefixes[0].addressPrefix]"
]
},
"subnets": [
{
"name": "[parameters('VNetSettings').subnets[0].name]",
"properties": {
"addressPrefix": "[parameters('VNetSettings').subnets[0].addressPrefix]"
}
},
{
"name": "[parameters('VNetSettings').subnets[1].name]",
"properties": {
"addressPrefix": "[parameters('VNetSettings').subnets[1].addressPrefix]"
}
}
]
}
},
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/networkSecurityGroups",
"name": "NSG1",
"location": "[resourceGroup().location]",
"properties": {
"copy": [
{
"name": "securityRules",
"count": "[length(parameters('networkSecurityGroupsSettings').securityRules)]",
"input": {
"name": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].name]",
"properties": {
"description": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].description]",
"priority": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].priority]",
"protocol": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].protocol]",
"sourcePortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].sourcePortRange]",
"destinationPortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].destinationPortRange]",
"sourceAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].sourceAddressPrefix]",
"destinationAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].destinationAddressPrefix]",
"access": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].access]",
"direction": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].direction]"
}
}
}
]
}
}
]
}
securityRules
자식 리소스에서 속성 값을 지정하는 방법을 좀 더 자세히 살펴보겠습니다. 모든 속성은 parameters()
함수를 사용하여 참조됩니다. 그런 다음 점 연산자를 사용하여 securityRules
배열을 참조하고 현재 반복 값을 기준으로 인덱싱합니다. 마지막으로 다른 점 연산자를 사용하여 개체의 이름을 참조합니다.
템플릿 시도
GitHub에서 예제 템플릿을 사용할 수 있습니다. 템플릿을 배포하려면 리포지토리를 복제하고, 다음 Azure CLI 명령을 실행합니다.
git clone https://github.com/mspnp/template-examples.git
cd template-examples/example3-object-param
az group create --location <location> --name <resource-group-name>
az deployment group create -g <resource-group-name> \
--template-uri https://raw.githubusercontent.com/mspnp/template-examples/master/example3-object-param/deploy.json \
--parameters deploy.parameters.json
다음 단계
- Azure Resource Manager
- ARM 템플릿이란?
- 자습서: 첫 번째 ARM 템플릿 만들기 및 배포
- 자습서: ARM 템플릿에 리소스 추가
- ARM 템플릿 모범 사례
- Azure Resource Manager 설명서
- ARM 템플릿 설명서