向 ARM 模板 FailOverGroup 提供数据库的动态列表
Provide a dynamic list of databases to ARM template FailOverGroup
我正在尝试通过 ARM 模板为 SQL 服务器创建 FailOverGroup。在一个理想的世界中,我希望能够将一组数据库名称传递到我的模板中,并使用它来生成一组数据库资源,但是我无法做到这一点。下一次尝试是将弹性池中的所有数据库添加到 FOG,但同样,我找不到通过 ARM 模板将数据库拉入池中的方法。
以下是我当前使用 'hard coded' 数据库名称的示例;
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"origin_sql_server_name": {
"type": "string"
},
"web-database-name": {
"type": "string"
},
"core-database-name": {
"type": "string"
},
"failover-database-server-name": {
"type": "string"
},
"dr-resource-group-name": {
"type": "string"
}
},
"variables": {
"fog-name": "[concat(parameters('origin_sql_server_name'),'/', parameters('origin_sql_server_name'),'-fog')]"
},
"resources": [
{
"type": "Microsoft.Sql/servers/failoverGroups",
"apiVersion": "2015-05-01-preview",
"name": "[variables('fog-name')]",
"properties": {
"readWriteEndpoint": {
"failoverPolicy": "Automatic",
"failoverWithDataLossGracePeriodMinutes": 60
},
"readOnlyEndpoint": {
"failoverPolicy": "Disabled"
},
"partnerServers": [
{
"id": "[resourceId(parameters('dr-resource-group-name'),'Microsoft.Sql/servers', parameters('failover-database-server-name'))]"
}
],
"databases": [
"[resourceId('Microsoft.Sql/servers/databases', parameters('origin_sql_server_name'), parameters('web-database-name'))]",
"[resourceId('Microsoft.Sql/servers/databases', parameters('origin_sql_server_name'), parameters('core-database-name'))]"
]
}
}
],
"outputs":{
"fogName": {
"type": "string",
"value": "[concat(parameters('origin_sql_server_name'),'-fog')]"
}
},
"functions": [
]
}
此方法的目的是拥有一个模板,该模板可用于具有相似但略有不同的数据库要求的几个不同站点。如果这不可能,那么我可以有单独的模板,但出于可维护性目的,我试图避免这种情况
谢谢!
您可以在故障转移组的数据库 属性 上使用数组复制 - 将您的数据库 属性 替换为:
"copy": [
{
"name": "databases",
"count": "[length(parameters('failOverDbs'))]",
"input": "['Microsoft.Sql/servers/databases', parameters('origin_sql_server_name'), parameters('failOVerDbs')[copyIndex('databases')])]"
}
]
然后为您的数据库列表使用一个数组参数。有帮助吗?
我正在尝试通过 ARM 模板为 SQL 服务器创建 FailOverGroup。在一个理想的世界中,我希望能够将一组数据库名称传递到我的模板中,并使用它来生成一组数据库资源,但是我无法做到这一点。下一次尝试是将弹性池中的所有数据库添加到 FOG,但同样,我找不到通过 ARM 模板将数据库拉入池中的方法。 以下是我当前使用 'hard coded' 数据库名称的示例;
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"origin_sql_server_name": {
"type": "string"
},
"web-database-name": {
"type": "string"
},
"core-database-name": {
"type": "string"
},
"failover-database-server-name": {
"type": "string"
},
"dr-resource-group-name": {
"type": "string"
}
},
"variables": {
"fog-name": "[concat(parameters('origin_sql_server_name'),'/', parameters('origin_sql_server_name'),'-fog')]"
},
"resources": [
{
"type": "Microsoft.Sql/servers/failoverGroups",
"apiVersion": "2015-05-01-preview",
"name": "[variables('fog-name')]",
"properties": {
"readWriteEndpoint": {
"failoverPolicy": "Automatic",
"failoverWithDataLossGracePeriodMinutes": 60
},
"readOnlyEndpoint": {
"failoverPolicy": "Disabled"
},
"partnerServers": [
{
"id": "[resourceId(parameters('dr-resource-group-name'),'Microsoft.Sql/servers', parameters('failover-database-server-name'))]"
}
],
"databases": [
"[resourceId('Microsoft.Sql/servers/databases', parameters('origin_sql_server_name'), parameters('web-database-name'))]",
"[resourceId('Microsoft.Sql/servers/databases', parameters('origin_sql_server_name'), parameters('core-database-name'))]"
]
}
}
],
"outputs":{
"fogName": {
"type": "string",
"value": "[concat(parameters('origin_sql_server_name'),'-fog')]"
}
},
"functions": [
]
}
此方法的目的是拥有一个模板,该模板可用于具有相似但略有不同的数据库要求的几个不同站点。如果这不可能,那么我可以有单独的模板,但出于可维护性目的,我试图避免这种情况 谢谢!
您可以在故障转移组的数据库 属性 上使用数组复制 - 将您的数据库 属性 替换为:
"copy": [
{
"name": "databases",
"count": "[length(parameters('failOverDbs'))]",
"input": "['Microsoft.Sql/servers/databases', parameters('origin_sql_server_name'), parameters('failOVerDbs')[copyIndex('databases')])]"
}
]
然后为您的数据库列表使用一个数组参数。有帮助吗?