【问题标题】:Predefined Resource Group in ARM TemplateARM 模板中的预定义资源组
【发布时间】:2018-06-19 09:31:11
【问题描述】:

我正在制作一个自定义手臂模板。

我希望在 JSON 中硬编码特定的资源组,所以 打开模板时,它将模拟“资源组:使用现有:预定义的选定资源组”

我一直在摸索几个小时并深入搜索网络,我还尝试导出现有资源组模板并将其导入自定义部署但它仍然显示

资源组 *新建 *使用现有的

有没有办法在 JSON 模板中定义现有的 RG?

【问题讨论】:

    标签: json azure azure-resource-manager azure-resource-group


    【解决方案1】:

    您可以使用嵌套模板,就像@4c74356b41 所说的那样,但您仍然会在门户中看到丑陋的“选择资源组”字段。

    我也有类似的问题(即使@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 变量替换为您的实际资源组名称即可。

    【讨论】:

      【解决方案2】:

      有几种方法可以实现这一点(不是说它有意义,但你可以这样做)。

      1. 围绕模板使用自动化以始终将其部署到同一个 rg。这很有意义,因为您的模板保持灵活
      2. 用父模板包装您的模板(因此将您的模板“转换”为嵌套模板)。这样,父模板可以控制您的嵌套模板部署到哪个资源组(查找跨资源组 ARM 模板部署)。
      3. 使您的模板成为嵌套的内联模板(最坏的情况)。这与第 2 点几乎相同,但更糟的是,因为嵌套的内联模板有一个特殊的缺点,即不能使用自己的参数\变量,只能使用父级中定义的参数\变量。

      同样,这些都没有任何意义,因为您应该将其部署到正确的订阅\资源组组合。但如果你坚持的话,你有它。

      但是门户体验将保持不变(没有办法解决这个问题,您可以强制模板始终部署到同一个资源组(这没有任何意义),但不改变门户体验) ,如果这就是您所关心的。

      【讨论】:

      • 感谢您的快速回复,所以如果我理解正确的话,目前没有办法实现门户内部预选的订阅/资源组,即使我将其封装为内部模板?我的模板将作为来自 github 的“部署到 azure”按钮执行,这意味着门户是第二站。
      • 好吧,就像我说的,您可以让它始终部署到特定的资源组,但门户网站体验无论如何都不会体现这一点。所以这个人会认为他在选择 RG(好吧,你的父母会部署到那个 rg,但嵌套会去你想要的地方)
      • 感谢指教! :)
      • 这里有一些注意事项 - 您在嵌套部署中指定的组必须已经存在,并且用户必须有权部署到该组......我对你的场景有点好奇,即你为什么要强迫一个特定的群体?
      • 好吧,我几乎说我认为这根本没有意义;)但他一直坚持;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2020-12-10
      相关资源
      最近更新 更多