Предоставить динамический список баз данных c для шаблона ARM FailOverGroup - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь создать FailOverGroup для SQL Сервера через шаблон ARM. В идеальном мире я хотел бы иметь возможность передавать массив имен баз данных в мой шаблон и использовать его для генерации массива ресурсов базы данных, однако я не смог заставить это работать. Следующая попытка состояла в том, чтобы добавить все базы данных из пула Elasti c в FOG, но, опять же, я не могу найти способ извлечения баз данных из пула через шаблон ARM. Ниже приведен мой текущий пример с «жестко закодированными» именами баз данных:

{
    "$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": [
    ]
}

Целью этого подхода является создание единого шаблона, который можно использовать на нескольких разных сайтах, имеющих похожие, но немного отличающиеся друг от друга требования к базе данных. Если это невозможно, у меня могут быть отдельные шаблоны, но я пытаюсь избежать этого для удобства обслуживания. Спасибо!

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете использовать копию массива в свойстве базы данных failoverGroup - замените свойство вашей базы данных на:

    "copy": [
        {
            "name": "databases",
            "count": "[length(parameters('failOverDbs'))]",
            "input": "['Microsoft.Sql/servers/databases', parameters('origin_sql_server_name'), parameters('failOVerDbs')[copyIndex('databases')])]"
        }
    ]

А затем используйте параметр массива для вашего списка БД. Это поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...