Sql server 在指定资源组的特定订阅下部署ARM模板,而不使用DependsOn

Sql server 在指定资源组的特定订阅下部署ARM模板,而不使用DependsOn,sql-server,azure-sql-database,azure-resource-manager,arm-template,Sql Server,Azure Sql Database,Azure Resource Manager,Arm Template,我希望单独部署ARM模板,而不是链接模板/嵌套模板/多个资源 示例:部署Sql Server和数据库 我为Sql Server和Sql数据库创建了单独的模板。我部署成功,工作正常 部署Sql Server ARM模板(专门为Sql Server设计) 部署Sql Server数据库(专门为参数文件中提到的Sql Server名称以上的Sql数据库设计) 在部署Sql数据库arm模板时,我在step2的参数文件中指定了准确的Sql server名称(在Step1中部署),但我在资源部分没有提到“d

我希望单独部署ARM模板,而不是链接模板/嵌套模板/多个资源

示例:部署Sql Server和数据库

我为Sql Server和Sql数据库创建了单独的模板。我部署成功,工作正常

  • 部署Sql Server ARM模板(专门为Sql Server设计)
  • 部署Sql Server数据库(专门为参数文件中提到的Sql Server名称以上的Sql数据库设计)
  • 在部署Sql数据库arm模板时,我在step2的参数文件中指定了准确的Sql server名称(在Step1中部署),但我在资源部分没有提到“dependson”参数,而是直接部署了。在部署过程中,我在选择的资源组下成功创建了数据库

    我的查询:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "location": {
                "type": "string",
                "defaultValue": "[resourceGroup().location]",
                "metadata": {
                    "description": "Location for all resources."
                }
            },
            "collation": {
                "type": "string",
                "defaultValue": "SQL_Latin1_General_CP1_CI_AS",
                "metadata": {
                    "description": "The collation of the database."
                }
            },
            "edition": {
                "type": "string",
                "metadata": {
                    "description": "The edition of the database. The DatabaseEditions enumeration contains all the valid editions. e.g. Basic, Premium."
                },
                "defaultValue": "Basic"
            },
            "sqlservername": {
                "type": "string",
                "metadata": {
                    "description": "The name of the sql server."
                }
            },
            "databasename": {
                "type": "string",
                "metadata": {
                    "description": "The name of the database to be operated on (updated or created)."
                },
                "minLength": 7,
                "maxLength": 128
            },
            "maxSizeBytes": {
                "type": "string",
                "metadata": {
                    "description": "The max size of the database expressed in bytes."
                }
            },
            "serviceobjectivename": {
                "type": "string",
                "metadata": {
                    "description": "The configured service level objective ID of the database. This is the service level objective that is in the process of being applied to the database."
                },
                "defaultValue": "Basic"
            },
            "tagsArray": {
                "type": "object",
                "metadata": {
                    "description": "Resource Tags helps to indentify the use of service"
                }
            }
        },
        "functions": [],
        "variables": {
            "sqldatabasename": "[concat(parameters('sqlservername'),'/',parameters('databasename'))]"
        },
        "resources": [
            {
                "name": "[variables('sqldatabasename')]",
                "type": "Microsoft.Sql/servers/databases",
                "apiVersion": "2014-04-01",
                "location": "[parameters('location')]",
                "tags": "[parameters('tagsArray')]",
                "properties": {
                    "collation": "[parameters('collation')]",
                    "edition": "[parameters('edition')]",
                    "maxSizeBytes": "[parameters('maxSizeBytes')]",
                    "requestedServiceObjectiveName": "[parameters('serviceobjectivename')]"
                }
            }
        ],
        "outputs": {
            "sqldatabaseresourceId": {
                "type": "object",
                "value": "[reference(resourceId('Microsoft.Sql/servers/databases',parameters('sqlservername'), parameters('databasename')),'2014-04-01')]"
            }
        }
    }
    
    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "tagsArray": {
                "value": {
                    "Environment": "POC"
                }
            },
            "servername": {
                "value": "sql-test"
            },
            "sqlAdministratorLogin": {
                "value": "sqladmin"
            },
            "sqlAdministratorLoginPassword": {
                "value": "myPassword586@"
            },
            "firewallIpAddresses": {
                "value": [
                    {
                        "start": "1.1.1.0",
                        "end": "1.1.1.1",
                        "clientName": "Clienttest1"
                    },
                    {
                        "start": "1.2.3.4",
                        "end": "1.2.3.16",
                        "clientName": "Clienttest2"
                    }
                ]
            },
            "location": {
                "value": ""
            }
        }
    }
    
    如何确保Sql数据库arm模板仅在特定服务器名称(步骤1)下部署,而不使用dependson参数?

    如何在不依赖资源的情况下使用资源部分中现有的参考资源id?

    sql server的step1(resourceid)的输出会有帮助吗

    Sql ARM模板部署JSON:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "location": {
                "type": "string",
                "defaultValue": "[resourceGroup().location]",
                "metadata": {
                    "description": "Location for all resources."
                }
            },
            "collation": {
                "type": "string",
                "defaultValue": "SQL_Latin1_General_CP1_CI_AS",
                "metadata": {
                    "description": "The collation of the database."
                }
            },
            "edition": {
                "type": "string",
                "metadata": {
                    "description": "The edition of the database. The DatabaseEditions enumeration contains all the valid editions. e.g. Basic, Premium."
                },
                "defaultValue": "Basic"
            },
            "sqlservername": {
                "type": "string",
                "metadata": {
                    "description": "The name of the sql server."
                }
            },
            "databasename": {
                "type": "string",
                "metadata": {
                    "description": "The name of the database to be operated on (updated or created)."
                },
                "minLength": 7,
                "maxLength": 128
            },
            "maxSizeBytes": {
                "type": "string",
                "metadata": {
                    "description": "The max size of the database expressed in bytes."
                }
            },
            "serviceobjectivename": {
                "type": "string",
                "metadata": {
                    "description": "The configured service level objective ID of the database. This is the service level objective that is in the process of being applied to the database."
                },
                "defaultValue": "Basic"
            },
            "tagsArray": {
                "type": "object",
                "metadata": {
                    "description": "Resource Tags helps to indentify the use of service"
                }
            }
        },
        "functions": [],
        "variables": {
            "sqldatabasename": "[concat(parameters('sqlservername'),'/',parameters('databasename'))]"
        },
        "resources": [
            {
                "name": "[variables('sqldatabasename')]",
                "type": "Microsoft.Sql/servers/databases",
                "apiVersion": "2014-04-01",
                "location": "[parameters('location')]",
                "tags": "[parameters('tagsArray')]",
                "properties": {
                    "collation": "[parameters('collation')]",
                    "edition": "[parameters('edition')]",
                    "maxSizeBytes": "[parameters('maxSizeBytes')]",
                    "requestedServiceObjectiveName": "[parameters('serviceobjectivename')]"
                }
            }
        ],
        "outputs": {
            "sqldatabaseresourceId": {
                "type": "object",
                "value": "[reference(resourceId('Microsoft.Sql/servers/databases',parameters('sqlservername'), parameters('databasename')),'2014-04-01')]"
            }
        }
    }
    
    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "tagsArray": {
                "value": {
                    "Environment": "POC"
                }
            },
            "servername": {
                "value": "sql-test"
            },
            "sqlAdministratorLogin": {
                "value": "sqladmin"
            },
            "sqlAdministratorLoginPassword": {
                "value": "myPassword586@"
            },
            "firewallIpAddresses": {
                "value": [
                    {
                        "start": "1.1.1.0",
                        "end": "1.1.1.1",
                        "clientName": "Clienttest1"
                    },
                    {
                        "start": "1.2.3.4",
                        "end": "1.2.3.16",
                        "clientName": "Clienttest2"
                    }
                ]
            },
            "location": {
                "value": ""
            }
        }
    }
    
    模板参数:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "location": {
                "type": "string",
                "defaultValue": "[resourceGroup().location]",
                "metadata": {
                    "description": "Location for all resources."
                }
            },
            "collation": {
                "type": "string",
                "defaultValue": "SQL_Latin1_General_CP1_CI_AS",
                "metadata": {
                    "description": "The collation of the database."
                }
            },
            "edition": {
                "type": "string",
                "metadata": {
                    "description": "The edition of the database. The DatabaseEditions enumeration contains all the valid editions. e.g. Basic, Premium."
                },
                "defaultValue": "Basic"
            },
            "sqlservername": {
                "type": "string",
                "metadata": {
                    "description": "The name of the sql server."
                }
            },
            "databasename": {
                "type": "string",
                "metadata": {
                    "description": "The name of the database to be operated on (updated or created)."
                },
                "minLength": 7,
                "maxLength": 128
            },
            "maxSizeBytes": {
                "type": "string",
                "metadata": {
                    "description": "The max size of the database expressed in bytes."
                }
            },
            "serviceobjectivename": {
                "type": "string",
                "metadata": {
                    "description": "The configured service level objective ID of the database. This is the service level objective that is in the process of being applied to the database."
                },
                "defaultValue": "Basic"
            },
            "tagsArray": {
                "type": "object",
                "metadata": {
                    "description": "Resource Tags helps to indentify the use of service"
                }
            }
        },
        "functions": [],
        "variables": {
            "sqldatabasename": "[concat(parameters('sqlservername'),'/',parameters('databasename'))]"
        },
        "resources": [
            {
                "name": "[variables('sqldatabasename')]",
                "type": "Microsoft.Sql/servers/databases",
                "apiVersion": "2014-04-01",
                "location": "[parameters('location')]",
                "tags": "[parameters('tagsArray')]",
                "properties": {
                    "collation": "[parameters('collation')]",
                    "edition": "[parameters('edition')]",
                    "maxSizeBytes": "[parameters('maxSizeBytes')]",
                    "requestedServiceObjectiveName": "[parameters('serviceobjectivename')]"
                }
            }
        ],
        "outputs": {
            "sqldatabaseresourceId": {
                "type": "object",
                "value": "[reference(resourceId('Microsoft.Sql/servers/databases',parameters('sqlservername'), parameters('databasename')),'2014-04-01')]"
            }
        }
    }
    
    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "tagsArray": {
                "value": {
                    "Environment": "POC"
                }
            },
            "servername": {
                "value": "sql-test"
            },
            "sqlAdministratorLogin": {
                "value": "sqladmin"
            },
            "sqlAdministratorLoginPassword": {
                "value": "myPassword586@"
            },
            "firewallIpAddresses": {
                "value": [
                    {
                        "start": "1.1.1.0",
                        "end": "1.1.1.1",
                        "clientName": "Clienttest1"
                    },
                    {
                        "start": "1.2.3.4",
                        "end": "1.2.3.16",
                        "clientName": "Clienttest2"
                    }
                ]
            },
            "location": {
                "value": ""
            }
        }
    }
    

    重要的是要理解,dependsOn使您能够将一个资源定义为仅依赖于模板中的一个或多个资源,并且不应使用来映射资源之间的关系。如中所述,dependsOn不是记录资源如何相互关联的正确方法

    如何确保Sql数据库arm模板仅在特定服务器名称(步骤1)下部署,而不使用dependson参数?

    Microsoft.Sql/servers/databases是Microsoft.Sql/servers
    的子资源,它是定义与父资源连接的子资源的名称

    如果在同一ARM模板中在父资源之后部署子资源,则必须设置dependsOn属性,因为它们之间不会自动创建隐式部署依赖关系。在这种情况下,指定dependsOn将确保在子资源之前部署(并存在)父资源

    也就是说,定义后,您可以使用斜杠格式化类型和名称,以包括父类型和名称

    "type": "{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}",
    "name": "{parent-resource-name}/{child-resource-name}",
    
    因此,SQL数据库可以定义为:

    {
      "type": "Microsoft.Sql/servers/databases",
      "name": "[concat(variables('sqlServerName'), '/', parameters('databaseName'))]",
      ...
    
    接下来是你的下一个问题:

    如何在不依赖资源的情况下使用资源部分中现有的参考资源id?

    sql server的step1(resourceid)的输出会有帮助吗

    由于您已经在另一个模板中部署了父资源(DB Server),所以不要设置依赖项。相反,将子资源(数据库)部署到相同的资源组,并提供父资源的名称。这就足够了

    例如:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "sqlServerName": {
                "type": "string",
                "defaultValue": "sqlserver"
            },
            "databaseName": {
                "type": "string",
                "defaultValue": "mydb"
            }
        },
        "resources": [
            {
                "type": "Microsoft.Sql/servers/databases",
                "apiVersion": "2014-04-01",
                "name": "[concat(parameters('sqlServerName'), '/', parameters('databaseName'))]",
                "location": "[resourceGroup().location]",
                "properties": {
                    "collation": "SQL_Latin1_General_CP1_CI_AS",
                    "edition": "Basic"
                }
            }
        ],
        "outputs": {}
    }
    

    根据您提供的模板,它是正确的。它将数据库部署到特殊的SQL server。您想知道什么?@JimXu我想知道,如果没有“dependson”,我们如何使用sql server资源id(而不是参数文件中提到的sql参数名称)“资源”部分中的参数或在arm Template中为sql server添加其他资源是指您想知道如何使用资源id获取sql server信息?@JimXu是,并且我想确保sql数据库arm在特定sql server资源id下部署,而不提“dependson”参数。”。要获取Sql Server的资源id:“[resourceId('Microsoft.Sql/Sqlservers/',parameters('sqlservername'))]”,但如果我在“dependson”下使用相同的资源id,我必须创建另一个我不想创建的资源。我尝试的是在没有“dependson”部分的情况下,我想确保sql database arm正在sql server资源下部署。您可以使用带有sql server资源id的函数
    reference
    ,在资源部分获取服务器信息。非常感谢您提供的信息。我理解深度的含义和参数用法:)@PavanKumarGVVS乐于帮助!如果你觉得它有用的话,请考虑一下。