Попытка использовать Terraform и ARM для создания отказоустойчивой группы с базами данных Mutliple, но с ошибками в свойстве баз данных в ARM - PullRequest
0 голосов
/ 15 мая 2019

Я получаю ошибки при попытке передать более 1 базы данных в шаблон ARM:

Ошибка ожидания развертывания: Code = "DeploymentFailed" Message = "At по крайней мере одна операция развертывания ресурса завершилась неудачно. Пожалуйста, перечислите развертывание операции для деталей. Пожалуйста, смотрите https://aka.ms/arm-debug для использования детали. "Details = [{" code ":" BadRequest "," message ":" {\ r \ n \ "error \": {\ r \ n \ "подробности \": [\ r \ n {\ r \ n \ "код \": \ "InvalidResourceIdSegment \", \ r \ n \ "message \": \ "\", \ r \ n
\ "target \": \ "parameters.properties.databases [0] \" \ r \ n} \ r \ n
], \ r \ n \ "code \": \ "InvalidResourceIdSegment \", \ r \ n \ "message \": \ "Сегмент 'parameters.properties.databases [0]' в URL неверно. \ "\ r \ n} \ r \ n}"}]

Я попытался передать строку идентификаторов через запятую, а затем попытался преобразовать строку в массив. Я попытался добавить кавычки вокруг каждой отдельной строки.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "sqlServerPrimaryName": {
            "type": "string",
            "metadata": {
                "description": "The name of the primary SQL Server."
            }
        },
        "partnerServers": {
            "type": "string",
            "metadata": {
                "description": "The list of names of the secondary SQL Server."
            }
        },
        "partnerResourceGroups": {
            "type": "string",
            "metadata": {
                "description": "The list of names of the secondary SQL Server Resource Groups."
            }
        },
        "sqlFailoverGroupName": {
            "type": "string",
            "metadata": {
                "description": "The name of the failover group."
            }
        },
        "sqlDatabaseName": {
            "type": "string",
            "metadata": {
                "description": "The name of the SQL Database."
            }
        }
    },
    "variables": {
        "partnerArray": "[split(parameters('partnerServers'),',')]",
        "partnerRgArray": "[split(parameters('partnerResourceGroups'),',')]",
        "sqlDBNameArray": "[split(parameters('sqlDatabaseName'), ',')]"
    },
    "resources": [
        {
            "apiVersion": "2015-05-01-preview",
            "type": "Microsoft.Sql/servers/failoverGroups",
            "name": "[concat(parameters('sqlServerPrimaryName'), '/', parameters('sqlFailoverGroupName'))]",
            "properties": {
                "serverName": "[parameters('sqlServerPrimaryName')]",
                "copy": [{
                    "name": "partnerServers",
                    "count": "[length(variables('partnerArray'))]",
                    "input": {
                        "id": "[resourceId(variables('partnerRgArray')[copyIndex('partnerServers')], 'Microsoft.Sql/servers/', variables('partnerArray')[copyIndex('partnerServers')])]"
                    }
                }],
                "readWriteEndpoint": {
                    "failoverPolicy": "Automatic",
                    "failoverWithDataLossGracePeriodMinutes": 60
                },
                "readOnlyEndpoint": {
                    "failoverPolicy": "Disabled"
                },
                "databases": [
                    "[variables('sqlDBNameArray')]"
                ]
            }
        }
    ]
}

Я ожидаю, что в группу отработки отказа попадет более одной базы данных, но я получаю разные ошибки в зависимости от того, отправляю ли я массив или строку.

1 Ответ

0 голосов
/ 15 мая 2019

в соответствии с документацией, которую вы должны передать в массиве resourceIds базы данных свойству database:

    "databases": [
      "/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/Default/providers/Microsoft.Sql/servers/failover-group-primary-server/databases/testdb-1",
      "/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/Default/providers/Microsoft.Sql/servers/failover-group-primary-server/databases/testdb-2"
    ]

Не уверен, что это возможно с terraform: https://github.com/hashicorp/terraform/issues/11085

Попробуйте передать массив: https://www.phillipsj.net/posts/tips-when-using-the-azure-arm-resource-in-terraform

...