繁体   English   中英

使用二头肌的 Azure SQL 故障转移组

[英]Azure SQL failover group using Bicep

我正在尝试使用 Bicep 模板实现 Azure SQL 故障转移组。 我遇到的问题是,我无法弄清楚如何引用在故障转移组的数据库属性中作为参数传递的数据库数组。 将数组值分配给数据库属性时,它给了我一个期望字符串值的错误,而分配的是数组,这当然是不正确的。

resource symbolicname 'Microsoft.Sql/servers/failoverGroups@2021-11-01-preview' = {
  name: 'string'
  tags: {
    tagName1: 'tagValue1'
    tagName2: 'tagValue2'
  }
  parent: resourceSymbolicName
  properties: {
    databases: [
      'string'
    ]
    partnerServers: [
      {
        id: 'string'
      }
    ]
    readWriteEndpoint: {
      failoverPolicy: 'string'
      failoverWithDataLossGracePeriodMinutes: int
    }
  }
}

有没有人有任何使用二头肌模板的 Azure SQL 故障转移组的工作示例,或者为我指出解决方案的正确方向?

编辑 1 - main.bicep :这是我在添加 Thomas 的更改后尝试的代码:

param databases array
param primarySqlServerName string
param drSqlServerName string
param failovergroupName string

module primarySql '***************' = {
  Deploy primary SQL Server and database
}
module drSql '****************' = {
  Deploy secondary SQL Server
}

resource sqlServerFailoverGroup 'Microsoft.Sql/servers/failoverGroups@2020-11-01-preview' = {
  name: '${primarySqlServerName}/${failovergroupName}'
  properties: {
    databases: [for database in databases: resourceId('Microsoft.Sql/servers/databases', primarySqlServerName, database)]
    readWriteEndpoint: {
      failoverPolicy: 'Automatic'
      failoverWithDataLossGracePeriodMinutes: 60
    }
    readOnlyEndpoint: {
      failoverPolicy: 'Enabled'
    }
    partnerServers: [
      {
        id: resourceId('Microsoft.Sql/servers', drSqlServerName)
      }
    ]
  }
  dependsOn: [
    primarySql
    drSql
  ]
}

在上面部署时出现以下错误:

无法处理“1”行和“1289”列的资源模板语言表达式。 '无法评估模板语言函数'resourceId':所有函数参数必须是字符串文字。 请参阅 aka.ms/arm-template-expressions/#resourceid 了解使用详情。

databases属性是一个字符串。 partnerServers属性是一个对象数组。

两者都需要数据库和合作伙伴服务器的资源 ID。

这是一个使用故障转移组部署 2 个 sql 服务器和数据库的简单示例

sql.二头肌:

param location string = resourceGroup().location
param sqlServerName string
param sqlServerPrincipalType string
param sqlServerAadAdminName string
param sqlServerAadAdminId string
param databaseNames array

// Create the Server
resource sqlServer 'Microsoft.Sql/servers@2020-11-01-preview' = {
  name: sqlServerName
  location: location
  tags: {}
  properties: {
    administrators: {
      administratorType: 'ActiveDirectory'
      principalType: sqlServerPrincipalType
      login: sqlServerAadAdminName
      sid: sqlServerAadAdminId
      azureADOnlyAuthentication: true
    }
  }
}

// We create the database only in the primary region
resource database 'Microsoft.Sql/servers/databases@2020-08-01-preview' = [for databaseName in databaseNames: if (!empty(databaseNames)) {
  name: '${sqlServer.name}/${empty(databaseNames) ? 'placeholder' : databaseName}'
  location: location
  sku: {
    name: 'S0'
    tier: 'Standard'
  }
  properties: {
    sourceDatabaseId: sqlServer.id
  }
}]

和 main.bicep 文件:

param failoverGroupName string
param primarySqlServerName string
param primaryLocation string
param secondarySqlServerName string
param secondaryLocation string
param sqlServerPrincipalType string
param sqlServerAadAdminName string
param sqlServerAadAdminId string

param databaseNames array

module primarySql 'sql.bicep' = {
  name: 'primarySql'
  params: {
    location: primaryLocation
    sqlServerName: primarySqlServerName
    sqlServerPrincipalType: sqlServerPrincipalType
    sqlServerAadAdminName: sqlServerAadAdminName
    sqlServerAadAdminId: sqlServerAadAdminId
    databaseNames: databaseNames
  }
}

module secondarySql 'sql.bicep' = {
  name: 'secondarySql'
  params: {
    location: secondaryLocation
    sqlServerName: secondarySqlServerName
    sqlServerPrincipalType: sqlServerPrincipalType
    sqlServerAadAdminName: sqlServerAadAdminName
    sqlServerAadAdminId: sqlServerAadAdminId
    databaseNames: []
  }
}

resource sqlServerFailoverGroup 'Microsoft.Sql/servers/failoverGroups@2020-11-01-preview' = {
  name: '${primarySqlServerName}/${failoverGroupName}'
  dependsOn: [ primarySql, secondarySql ]
  properties: {
    databases: [for dataBaseName in databaseNames: resourceId('Microsoft.Sql/servers/databases', primarySqlServerName, dataBaseName)]
    readWriteEndpoint: {
      failoverPolicy: 'Automatic'
      failoverWithDataLossGracePeriodMinutes: 60
    }
    readOnlyEndpoint: {
      failoverPolicy: 'Enabled'
    }
    partnerServers: [
      {
        id: resourceId(resourceGroup().name, 'Microsoft.Sql/servers', secondarySqlServerName)
      }
    ]
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM