Azure ARM故障转移组数据库属性不接受变量数组

时间:2018-09-27 22:32:53

标签: azure azure-sql-database

我正在尝试使用ARM模板以编程方式将数据库分配给故障转移组,但是我不断收到错误消息“ InvalidResourceIdSegment”。我在论坛here中发现了一些很接近的内容,但是那只是针对单个数据库的,所以它并不是我所遇到问题的答案。我基本上是想使用一个变量,该变量是我需要添加到此故障转移组的数据库的resourceIds数组列表。

"databases": {
  "critical": {
    "names": [
      "DB1",
      "DB2",
      "DB3",
      "DB4"
    ],
    "ids": [
      "[resourceId('Microsoft.Sql/servers/databases', variables('serverNameWest'), 'DB1')]",
      "[resourceId('Microsoft.Sql/servers/databases', variables('serverNameWest'), 'DB2')]",
      "[resourceId('Microsoft.Sql/servers/databases', variables('serverNameWest'), 'DB3')]",
      "[resourceId('Microsoft.Sql/servers/databases', variables('serverNameWest'), 'DB4')]"
    ]
  }
}

这是故障转移组资源的一个片段

{
    "type": "Microsoft.Sql/servers/failoverGroups",
    "name": "[concat(variables('serverNameWest'), '/', variables('failovergroups').critical)]",
    "apiVersion": "2015-05-01-preview",
    "condition": "[parameters('setRedundancy')]",
    "tags": {
      "Environment": "[parameters('Environment')]"
    },
    "properties": {
      "readWriteEndpoint": {
        "failoverPolicy": "Automatic",
        "failoverWithDataLossGracePeriodMinutes": 15
      },
      "readOnlyEndpoint": {
        "failoverPolicy": "Enabled"
      },
      "partnerServers": [
        {
          "id": "[resourceID('Microsoft.Sql/servers', variables('serverNameEast'))]"
        }
      ],
      "databases": [
       "[variables('databases').critical.ids]"
      ]
    },
    "dependsOn": [
      "[resourceID('Microsoft.Sql/servers', variables('serverNameEast'))]",
      "[resourceID('Microsoft.Sql/servers', variables('serverNameWest'))]",
      "[concat(resourceID('Microsoft.Sql/servers', variables('serverNameWest')), '/elasticpools/', variables('elasticpools').critwest)]",
      "[concat(resourceID('Microsoft.Sql/servers', variables('serverNameEast')), '/elasticpools/', variables('elasticpools').criteast)]",
      "BusinessCriticalWest",
      "BusinessCriticalEast"
    ]
  }

将变量[variables('databases').critical.ids]传递到数据库属性总是会出现此错误:

"code": "InvalidResourceIdSegment", "message": "The 'parameters.properties.databases[0]' segment in the url is invalid."

但是,如果我分别添加它们(如下所示),则一切正常。

"[variables('databases').critical.ids[0]]"

我尝试在属性(由于复制功能需要输入名称值对)中使用复制功能,以及将复制功能作为变量使用(这也会返回与invalidResourceIdSegment相同的错误) 。我感到困惑,因此不胜感激。

1 个答案:

答案 0 :(得分:0)

@nicklaws我在寻找其他东西时碰到了这一点。

首先,我想知道这是否可能是一个问题:

variables('serverNameEast')

由于我看不到您的变量的设置,所以我不能告诉您,我的通常看起来像这样:

variables('serverNameEast').name 

例如。

第二,这是我使用过很多次的完整的ARM模板,并且可以正常工作:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "businessOwner": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "Responsible for billing of the resource"
        }
    },
    "technicalOwner": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "Responsible for the technology decisions of the resource"
        }
    },
    "environment": {
        "type": "string",
        "metadata": {
            "description": "Provides information on the environment that the resource belongs to"
        },
        "allowedValues": [
            "prod",
            "nprd",
            "sand"
        ]
    },
    "costCode": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "Provides a charge code or cost center to attribute the bill for the resources too. This could be a project code or cost Centre"
        }
    },
    "projectName": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "Provides information on the project that the resource group and resources belong to."
        }
    },
    "primaryAdministratorLogin": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "Administrator username for the server. Once created it cannot be changed."
        }
    },
    "primaryAdministratorLoginPassword": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "The administrator login password (required for server creation)."
        }
    },
    "sqlServerSecondaryRegion": {
        "type": "string",
        "metadata": {
            "description": "The location of the secondary SQL Server."
        }
    },
    "sqlServerSecondaryAdminUsername": {
        "type": "string",
        "metadata": {
            "description": "The administrator username of the secondary SQL Server."
        }
    },
    "sqlServerSecondaryAdminPassword": {
        "type": "string",
        "metadata": {
            "description": "The administrator password of the secondary SQL Server."
        }
    },
    "requestedServiceObjectiveName": {
        "type": "string",
        "metadata": {
            "description": "The name of the configured service level objective of the database. This is the service level objective that is in the process of being applied to the database. Once successfully updated, it will match the value of serviceLevelObjective property."
        }
    },
    "sampleName": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "Indicates the name of the sample schema to apply when creating this database. If createMode is not Default, this value is ignored. Not supported for DataWarehouse edition. - AdventureWorksLT"
        }
    },
    "maxSizeBytes": {
        "type": "string",
        "defaultValue": "107374182400",
        "metadata": {
            "description": "The max size of the database expressed in bytes. If createMode is not Default, this value is ignored."
        }
    },
    "collation": {
        "type": "string",
        "defaultValue": "SQL_Latin1_General_CP1_CI_AS",
        "metadata": {
            "description": "The collation of the database. If createMode is not Default, this value is ignored."
        }
    },
    "createMode": {
        "type": "string",
        "defaultValue": "Default",
        "metadata": {
            "description": "Specifies the mode of database creation."
        }
    },
    "readScale": {
        "type": "string",
        "defaultValue": "Disabled",
        "metadata": {
            "description": "Specifies the mode of database creation."
        }
    },
    "edition": {
        "type": "string",
        "defaultValue": "Standard",
        "metadata": {
            "description": "The edition of the database."
        }
    },
    "zoneRedundant": {
        "type": "bool",
        "defaultValue": false,
        "metadata": {
            "description": "Whether or not this database is zone redundant, which means the replicas of this database will be spread across multiple availability zones."
        }
    },
    "firewallDigitalNetworkFrom": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "firewall rule"
        }
    },
    "firewallDigitalNetworkTo": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "firewall rule"
        }
    },
    "firewallMelbourneOfficeFrom": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "firewall rule"
        }
    },
    "firewallMelbourneOfficeTo": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "firewall rule"
        }
    },
    "firewallSydneyOfficeFrom": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "firewall rule"
        }
    },
    "firewallSydneyOfficeTo": {
        "type": "string",
        "defaultValue": "NOT_SET",
        "metadata": {
            "description": "firewall rule"
        }
    },     
    "failoverEnabled": {
        "type": "string",
        "defaultValue": "true",
        "metadata": {
            "description": "Whether we allow a secondary SQL server with failover. This could be used to save money"
        }
    }
},
"variables": {
    "sqlServerPrimary": {
        "name": "[toLower(concat(parameters('projectName'), '-',parameters('environment'), '-', 'sqlsvr-primary'))]",
        "requestedServiceObjectiveName": "[parameters('requestedServiceObjectiveName')]"
    },
    "sqlServerSecondary": {
        "name": "[toLower(concat(parameters('projectName'), '-',parameters('environment'), '-', 'sqlsvr-secondary'))]"
    },
    "sqlFailoverGroupName": {
        "name": "[toLower(concat(parameters('projectName'), '-',parameters('environment'), '-', 'failover-group'))]"
    }
},
"resources": [
    {
        "name": "[variables('sqlServerPrimary').name]",
        "type": "Microsoft.Sql/servers",
        "apiVersion": "2015-05-01-preview",
        "location": "[resourceGroup().location]",
        "tags": {
            "BusinessOwner": "[parameters('businessOwner')]",
            "TechnicalOwner": "[parameters('technicalOwner')]",
            "Environment": "[parameters('environment')]",
            "CostCode": "[parameters('costCode')]",
            "Project": "[parameters('projectName')]"
        },
        "properties": {
            "administratorLogin": "[parameters('primaryAdministratorLogin')]",
            "administratorLoginPassword": "[parameters('primaryAdministratorLoginPassword')]",
            "version": "12.0"
        },
        "resources": [
            {
                "apiVersion": "2015-05-01-preview",
                "condition": "[equals(parameters('failoverEnabled'),'true')]",
                "type": "failoverGroups",
                "name": "[variables('sqlFailoverGroupName').name]",
                "tags": {
                    "BusinessOwner": "[parameters('businessOwner')]",
                    "TechnicalOwner": "[parameters('technicalOwner')]",
                    "Environment": "[parameters('environment')]",
                    "CostCode": "[parameters('costCode')]",
                    "Project": "[parameters('projectName')]"
                },
                "properties": {
                    "serverName": "[variables('sqlServerPrimary').name]",
                    "partnerServers": [
                        {
                            "id": "[resourceId('Microsoft.Sql/servers/', variables('sqlServerSecondary').name)]"
                        }
                    ],
                    "readWriteEndpoint": {
                        "failoverPolicy": "Automatic",
                        "failoverWithDataLossGracePeriodMinutes": 60
                    },
                    "readOnlyEndpoint": {
                        "failoverPolicy": "Disabled"
                    },
                    "databases": [
                    ]
                },
                "dependsOn": [
                    "[variables('sqlServerPrimary').name]",
                    "[resourceId('Microsoft.Sql/servers', variables('sqlServerSecondary').name)]"
                ]
            },
            {
                "name": "AllowAllWindowsAzureIps",
                "type": "firewallRules",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "0.0.0.0",
                    "endIpAddress": "0.0.0.0"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerPrimary').name)]"
                  ]
            },
            {
                "name": "digitalNetwork",
                "type": "firewallRules",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "[parameters('firewallDigitalNetworkFrom')]",
                    "endIpAddress": "[parameters('firewallDigitalNetworkTo')]"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerPrimary').name)]"
                  ]
            },
            {
                "name": "MelbourneOffice",
                "type": "firewallRules",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "[parameters('firewallMelbourneOfficeFrom')]",
                    "endIpAddress": "[parameters('firewallMelbourneOfficeTo')]"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerPrimary').name)]"
                  ]
            },
            {
                "name": "SydneyOffice",
                "type": "firewallRules",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "[parameters('firewallSydneyOfficeFrom')]",
                    "endIpAddress": "[parameters('firewallSydneyOfficeTo')]"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerPrimary').name)]"
                  ]
            }
        ]
    },
    {
        "type": "Microsoft.Sql/servers",
        "kind": "v12.0",
        "condition": "[equals(parameters('failoverEnabled'),'true')]",
        "name": "[variables('sqlServerSecondary').name]",
        "apiVersion": "2015-05-01-preview",
        "location": "[parameters('sqlServerSecondaryRegion')]",
        "tags": {
            "BusinessOwner": "[parameters('businessOwner')]",
            "TechnicalOwner": "[parameters('technicalOwner')]",
            "Environment": "[parameters('environment')]",
            "CostCode": "[parameters('costCode')]",
            "Project": "[parameters('projectName')]"
        },
        "properties": {
            "administratorLogin": "[parameters('sqlServerSecondaryAdminUsername')]",
            "administratorLoginPassword": "[parameters('sqlServerSecondaryAdminPassword')]",
            "version": "12.0"
        },
        "resources": [
            {
                "name": "AllowAllWindowsAzureIps",
                "type": "firewallRules",
                "condition": "[equals(parameters('failoverEnabled'),'true')]",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "0.0.0.0",
                    "endIpAddress": "0.0.0.0"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerSecondary').name)]"
                  ]
            },
            {
                "name": "digitalNetwork",
                "type": "firewallRules",
                "condition": "[equals(parameters('failoverEnabled'),'true')]",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "[parameters('firewallDigitalNetworkFrom')]",
                    "endIpAddress": "[parameters('firewallDigitalNetworkTo')]"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerSecondary').name)]"
                  ]
            },
            {
                "name": "MelbourneOffice",
                "type": "firewallRules",
                "condition": "[equals(parameters('failoverEnabled'),'true')]",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "[parameters('firewallMelbourneOfficeFrom')]",
                    "endIpAddress": "[parameters('firewallMelbourneOfficeTo')]"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerSecondary').name)]"
                  ]
            },
            {
                "name": "SydneyOffice",
                "type": "firewallRules",
                "condition": "[equals(parameters('failoverEnabled'),'true')]",
                "apiVersion": "2015-05-01-preview",
                "properties": {
                    "startIpAddress": "[parameters('firewallSydneyOfficeFrom')]",
                    "endIpAddress": "[parameters('firewallSydneyOfficeTo')]"
                },
                "dependsOn": [
                    "[concat('Microsoft.Sql/servers/', variables('sqlServerSecondary').name)]"
                  ]
            }
        ]
    }
]

}

希望有帮助。