You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bicep创建Synapse工作区与SQL池时遇CreateSqlComputeOrchestrationError错误

使用Bicep部署Synapse工作区和SQL池时遇到资源操作冲突错误

尝试用Bicep创建Synapse工作区和SQL池时,遇到以下错误:

SQL Datawarehouse 'sql_pool_1' creation for workspace synapseyjdzc2vokh in subscription xxxxx did not succeed The operation on the resource could not be completed because it was interrupted by another operation on the same resource. (Code: CreateSqlComputeOrchestrationError;OperationInterrupted)

已尝试多种调整,但错误信息有限,无法确定根因。以下是相关部署文件及命令:

Main.bicep 文件

//scope
targetScope = 'resourceGroup'
param utcValue string = utcNow()
var randomstring = toLower(replace(uniqueString(subscription().id, resourceGroup().id, utcValue), '-', ''))
param ipaddress string
var synapseName = 'synapse${randomstring}'
param sqlAdministratorLogin string
@secure()
param sqlAdministratorLoginPassword string
var blobName = 'storage${randomstring}'
param storageAccountType string
param sqlpoolName string
param bigDataPoolName string
param nodeSize string
param sparkPoolMinNodeCount int
param sparkPoolMaxNodeCount int
param defaultDataLakeStorageFilesystemName string
param collation string
param userObjectId string
param dataLakeUrlFormat string
param location string

//Storage account for deployment scripts
module synapsedeploy 'synapse-workspace.bicep' = {
  name: 'synapsed'
  params: {
    synapseName: synapseName
    location: location
    sqlAdministratorLogin: sqlAdministratorLogin
    sqlAdministratorLoginPassword: sqlAdministratorLoginPassword
    blobName: blobName
    storageAccountType: storageAccountType
    sqlpoolName: sqlpoolName
    bigDataPoolName: bigDataPoolName
    nodeSize: nodeSize
    sparkPoolMinNodeCount: sparkPoolMinNodeCount
    sparkPoolMaxNodeCount: sparkPoolMaxNodeCount
    defaultDataLakeStorageFilesystemName: defaultDataLakeStorageFilesystemName
    collation: collation
    startIpaddress: ipaddress
    endIpAddress: ipaddress
    userObjectId: userObjectId
    dataLakeUrlFormat: dataLakeUrlFormat
  }
}

output resourceSuffix string = randomstring

synapse-workspace.bicep 文件

param synapseName string
param location string
param sqlAdministratorLogin string
@secure()
param sqlAdministratorLoginPassword string
param blobName string
param storageAccountType string
param sqlpoolName string
param bigDataPoolName string
param nodeSize string
param sparkPoolMinNodeCount int
param sparkPoolMaxNodeCount int
param defaultDataLakeStorageFilesystemName string
param collation string
param startIpaddress string
param endIpAddress string
param userObjectId string
param dataLakeUrlFormat string


var storageBlobDataContributorRoleID = 'ba92f5b4-2d11-453d-a403-e96b0029c9fe'
var storageRoleUniqueId = guid(resourceId('Microsoft.Storage/storageAccounts', synapseName), blobName)
var storageRoleUserUniqueId = guid(resourceId('Microsoft.Storage/storageAccounts', synapseName), userObjectId)
resource datalakegen2 'Microsoft.Storage/storageAccounts@2021-09-01' = {
  name: blobName
  kind: 'StorageV2'
  location: location
  properties:{
    minimumTlsVersion: 'TLS1_2'
    isHnsEnabled: true
  }
  sku: {
    name: storageAccountType
  }
}

resource blob 'Microsoft.Storage/storageAccounts/blobServices@2021-09-01' = {
  name:  '${datalakegen2.name}/default'
}

resource containera 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-09-01' = {
  name: '${datalakegen2.name}/default/${defaultDataLakeStorageFilesystemName}'
  properties: {
    publicAccess: 'None'
  }
  dependsOn:[
    blob
  ]
} 

resource synapse 'Microsoft.Synapse/workspaces@2021-06-01' = {
  name: synapseName
  location: location
  properties: {
    sqlAdministratorLogin: sqlAdministratorLogin
    sqlAdministratorLoginPassword: sqlAdministratorLoginPassword
    defaultDataLakeStorage:{
      accountUrl: format(dataLakeUrlFormat, datalakegen2.name)
      filesystem: defaultDataLakeStorageFilesystemName
    }
  }
  identity:{
    type:'SystemAssigned'
  }
}

resource synapseroleassing 'Microsoft.Authorization/roleAssignments@2020-10-01-preview' = {
  name: storageRoleUniqueId
  scope: datalakegen2
  properties:{
    principalId: synapse.identity.principalId
    principalType: 'ServicePrincipal'
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', storageBlobDataContributorRoleID)
  }
}

resource userroleassing 'Microsoft.Authorization/roleAssignments@2020-10-01-preview' = {
  name: storageRoleUserUniqueId
  scope: datalakegen2
  properties:{
    principalId: userObjectId
    principalType: 'User'
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', storageBlobDataContributorRoleID)
  }
}

resource manageid4Pipeline 'Microsoft.Synapse/workspaces/managedIdentitySqlControlSettings@2021-06-01' = {
  name: 'default'
  properties: {
    grantSqlControlToManagedIdentity: {
      desiredState:'Enabled'
    }
  }
  parent:synapse
}

resource sqlpool 'Microsoft.Synapse/workspaces/sqlPools@2021-06-01' = {
  name: sqlpoolName
  location: location
  parent: synapse
  sku:{
    name: 'DW100c'
  }
  properties:{
    collation: collation
    createMode: 'Default'
  }
}

resource sparkpool 'Microsoft.Synapse/workspaces/bigDataPools@2021-06-01' = {
  name: bigDataPoolName
  location: location
  parent: synapse
  properties:{
    nodeSize: nodeSize
    nodeSizeFamily: 'MemoryOptimized'
    autoScale:{
      enabled: true
      minNodeCount: sparkPoolMinNodeCount
      maxNodeCount: sparkPoolMaxNodeCount
    }
    autoPause:{
      enabled: true
      delayInMinutes: 15
    }
    sparkVersion: '3.2'
  }
}

// resource allowazure4synapse 'Microsoft.Synapse/workspaces/firewallRules@2021-06-01' = {
//   name: 'AllowAllWindowsAzureIps'
//   properties: {
//     endIpAddress: '0.0.0.0'
//     startIpAddress: '0.0.0.0'
//   }
//   parent: synapse
// }

// resource symbolicname 'Microsoft.Synapse/workspaces/firewallRules@2021-06-01' = {
//   name: 'AllowAccessPoint'
//   properties: {
//     endIpAddress: endIpAddress
//     startIpAddress: startIpaddress
//   }
//   parent: synapse
// }

参数文件

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {  

        "ipaddress": {
            "value": "xxx.xxx.xxx.xxx"
        },
        "sqlAdministratorLogin": {
          "value" : "adminuser"
        },
        "sqlAdministratorLoginPassword": {
          "value": "dffgf5^645*DGGD2"
        },
        "storageAccountType":{
          "value": "Standard_LRS"
        },
        "sqlpoolName":{
          "value": "sql_pool_1"
        },
        "bigDataPoolName": {
          "value": "etlexecuter"
        },
        "nodeSize":{
          "value": "Small"
        },
        "sparkPoolMinNodeCount":{
            "value": 3
        },
        "sparkPoolMaxNodeCount":{
          "value": 3
        },
        "defaultDataLakeStorageFilesystemName":{
          "value": "dl2"
        },
        "collation":{
          "value": "SQL_LATIN1_GENERAL_CP1_CI_AS"
        },
        "userObjectId":{
          "value": "xxxxxxxxxx"
        },
        "dataLakeUrlFormat":{
          "value": "https://{0}.dfs.core.windows.net"
        }
    }
}

部署命令

az deployment group create --resource-group "my-rg" --template-file "D:\bicep\main.bicep" --parameters "D:\bicep\parameters.json" --name synapse_deployment

可能的根因及解决方法

根因

Synapse工作区创建完成后,manageid4Pipeline(托管标识SQL控制设置)、sqlpool、sparkpool三个资源几乎同时发起操作,对Synapse工作区资源产生并发修改,导致操作冲突被中断。

解决方法

  1. 添加明确的资源依赖关系
    在sqlpool和sparkpool资源中添加对manageid4Pipeline的依赖,确保托管标识配置完成后再创建计算资源,修改后的代码如下:

    resource sqlpool 'Microsoft.Synapse/workspaces/sqlPools@2021-06-01' = {
      name: sqlpoolName
      location: location
      parent: synapse
      dependsOn: [manageid4Pipeline] // 新增依赖
      sku:{
        name: 'DW100c'
      }
      properties:{
        collation: collation
        createMode: 'Default'
      }
    }
    
    resource sparkpool 'Microsoft.Synapse/workspaces/bigDataPools@2021-06-01' = {
      name: bigDataPoolName
      location: location
      parent: synapse
      dependsOn: [manageid4Pipeline] // 新增依赖
      properties:{
        nodeSize: nodeSize
        nodeSizeFamily: 'MemoryOptimized'
        autoScale:{
          enabled: true
          minNodeCount: sparkPoolMinNodeCount
          maxNodeCount: sparkPoolMaxNodeCount
        }
        autoPause:{
          enabled: true
          delayInMinutes: 15
        }
        sparkVersion: '3.2'
      }
    }
    
  2. 拆分部署阶段
    将部署分为两个独立步骤:

    • 第一步:部署Synapse工作区、存储账户、角色分配及托管标识配置
    • 第二步:部署SQL池和Spark池
      可通过拆分Bicep模块或执行两次部署命令实现,避免资源操作并发。
  3. 清理残留部署
    检查资源组的部署历史,确认是否存在未完成的前序部署任务,若有则取消或删除残留任务后重新部署。


内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:32:33