ARM 模板中的预定义资源组
Predefined Resource Group in ARM Template
我正在制作自定义手臂模板。
我想在 JSON 中硬编码特定的资源组,所以
打开模板时,它将模拟 "Resource Group: Use existing: predefined selected Resource group"
我挠了挠脑袋好几个小时,深入搜索了网络,我也尝试导出现有资源组模板并将其导入自定义部署,但它仍然显示
资源组*创建新的*使用现有的
有什么方法可以在 JSON 模板中定义现有的 RG 吗?
有几种方法可以实现这一点(不是说它有意义,但你可以这样做)。
- 围绕模板使用自动化以始终将其部署到同一个 rg。这最有意义,因为您的模板保持灵活
- 用父模板包装您的模板(因此 "convert" 您的模板为嵌套模板)。这样父模板可以控制将嵌套模板部署到哪个资源组(查找跨资源组 ARM 模板部署)。
- 使您的模板成为嵌套内联模板(最坏情况)。这与第 2 点几乎相同,但更糟的是,因为嵌套内联模板具有无法使用自己的 parameters\variables 的特殊缺点,只能使用父级中定义的模板。
同样,none 这是有道理的,因为您应该将其部署到正确的 subscription\resource 组组合。但如果你坚持的话,你已经拥有了。
但门户体验将保持不变(没有办法解决这个问题,您可以强制模板始终部署到同一资源组(这没有任何意义),但不改变门户经验),如果这就是您所关心的。
您可以使用嵌套模板,如@4c74356b41 所说,但您仍然会在门户中看到难看的 "Select a resource group" 字段。
我有类似的问题(即使@4c74356b41 反复声称它没有任何意义)。我想从参数生成资源组名称。
您可以在此处找到有关如何使用嵌套模板的更多信息:Create resource group and deploy resources
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"someName": {
"type": "string"
}
},
"variables": {
"rgName": "[concat('rg-', parameters('someName'))]"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('rgLocation')]",
"name": "[variables('rgName')]",
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2018-05-01",
"name": "rgDeployment",
"resourceGroup": "[variables('rgName')]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', variables('rgName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
// PUT YOUR RESOURCES TEMPLATES HERE! //
}
],
"outputs": {}
}
}
}
],
"outputs": {}
}
只需将 rgName
变量替换为您的实际资源组名称即可。
我正在制作自定义手臂模板。
我想在 JSON 中硬编码特定的资源组,所以 打开模板时,它将模拟 "Resource Group: Use existing: predefined selected Resource group"
我挠了挠脑袋好几个小时,深入搜索了网络,我也尝试导出现有资源组模板并将其导入自定义部署,但它仍然显示
资源组*创建新的*使用现有的
有什么方法可以在 JSON 模板中定义现有的 RG 吗?
有几种方法可以实现这一点(不是说它有意义,但你可以这样做)。
- 围绕模板使用自动化以始终将其部署到同一个 rg。这最有意义,因为您的模板保持灵活
- 用父模板包装您的模板(因此 "convert" 您的模板为嵌套模板)。这样父模板可以控制将嵌套模板部署到哪个资源组(查找跨资源组 ARM 模板部署)。
- 使您的模板成为嵌套内联模板(最坏情况)。这与第 2 点几乎相同,但更糟的是,因为嵌套内联模板具有无法使用自己的 parameters\variables 的特殊缺点,只能使用父级中定义的模板。
同样,none 这是有道理的,因为您应该将其部署到正确的 subscription\resource 组组合。但如果你坚持的话,你已经拥有了。
但门户体验将保持不变(没有办法解决这个问题,您可以强制模板始终部署到同一资源组(这没有任何意义),但不改变门户经验),如果这就是您所关心的。
您可以使用嵌套模板,如@4c74356b41 所说,但您仍然会在门户中看到难看的 "Select a resource group" 字段。
我有类似的问题(即使@4c74356b41 反复声称它没有任何意义)。我想从参数生成资源组名称。
您可以在此处找到有关如何使用嵌套模板的更多信息:Create resource group and deploy resources
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"someName": {
"type": "string"
}
},
"variables": {
"rgName": "[concat('rg-', parameters('someName'))]"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('rgLocation')]",
"name": "[variables('rgName')]",
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2018-05-01",
"name": "rgDeployment",
"resourceGroup": "[variables('rgName')]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', variables('rgName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
// PUT YOUR RESOURCES TEMPLATES HERE! //
}
],
"outputs": {}
}
}
}
],
"outputs": {}
}
只需将 rgName
变量替换为您的实际资源组名称即可。