Sql server 在指定资源组的特定订阅下部署ARM模板,而不使用DependsOn
我希望单独部署ARM模板,而不是链接模板/嵌套模板/多个资源 示例:部署Sql Server和数据库 我为Sql Server和Sql数据库创建了单独的模板。我部署成功,工作正常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
{
"$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乐于帮助!如果你觉得它有用的话,请考虑一下。