使用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工作区资源产生并发修改,导致操作冲突被中断。
解决方法
添加明确的资源依赖关系
在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' } }拆分部署阶段
将部署分为两个独立步骤:- 第一步:部署Synapse工作区、存储账户、角色分配及托管标识配置
- 第二步:部署SQL池和Spark池
可通过拆分Bicep模块或执行两次部署命令实现,避免资源操作并发。
清理残留部署
检查资源组的部署历史,确认是否存在未完成的前序部署任务,若有则取消或删除残留任务后重新部署。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

