Synapse管道Blob存储事件触发器导致复制活动失败问题
问题现象
- 配置存储事件触发器,当ADLS Gen2存储中新增Blob时触发Synapse管道的复制活动
- 通过触发器(含手动触发)运行时,复制活动报错失败;但使用管道的运行/调试功能可成功执行
- 具体报错:
Operation on target Copy failed: ErrorCode=UnsupportedDataStoreEndpoint,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The data store endpoint is not supported in 'AzureBlobFS' connector. Error message : 'The domain of this endpoint is not in allow list. Original endpoint: '::redacted::.blob.core.windows.net'',Source=Microsoft.DataTransfer.ClientLibrary,''Type=Microsoft.DataTransfer.SecurityValidation.Exceptions.UrlValidationException,Message=The domain of this endpoint is not in allow list. Original endpoint: '::redacted::.blob.core.windows.net',Source=Microsoft.DataTransfer.SecurityValidation,'
- 触发负载中的关键URL字段:
{ "blobUrl": "https://<redacted>.blob.core.windows.net/<redacted>", "url": "https://<redacted>.blob.core.windows.net/<redacted>" }
原因分析
AzureBlobFS连接器(用于ADLS Gen2分层命名空间场景)要求使用DFS端点(格式:https://<账户名>.dfs.core.windows.net),但存储事件触发器返回的是Blob存储的标准端点(blob.core.windows.net),端点格式不匹配导致连接器的安全验证失败。而运行/调试时,管道直接使用了预配置的DFS端点,因此能正常执行。
解决方案
动态转换端点格式
在复制活动的源数据集配置中,使用表达式将触发器返回的Blob端点替换为DFS端点。示例表达式:@replace(triggerBody().data.blobUrl, '.blob.core.windows.net', '.dfs.core.windows.net')将该表达式用于数据集的文件路径或连接字符串的动态参数中,确保传递给AzureBlobFS连接器的是符合要求的DFS端点。
确认数据集配置
确保源数据集使用的是Azure Data Lake Storage Gen2(AzureBlobFS)连接器,且配置中使用的是DFS端点。若采用系统分配托管身份认证,必须保证端点格式严格符合https://<账户名>.dfs.core.windows.net。验证存储账户配置
确认触发事件的存储账户已启用分层命名空间(ADLS Gen2的核心特性),只有启用该特性的存储账户才能正常使用AzureBlobFS连接器。
内容的提问来源于stack exchange,提问作者user1393689

