Azure Storage删除目录报EndpointUnsupportedAccountFeatures错误解决
错误产生原因
EndpointUnsupportedAccountFeatures报错的触发逻辑非常明确:你执行的az storage blob directory delete --recursive命令调用的是Azure Data Lake Storage (ADLS) Gen2 专属的目录原子操作接口,该接口存在明确的特性兼容限制,不支持存储账户开启Blob软删除、容器软删除、Blob存储事件订阅三类功能。
结合你贴出的Blob服务属性查询结果,当前存储账户刚好开启了两项不兼容配置:
- Blob软删除:
deleteRetentionPolicy.enabled = true,配置了7天保留期 - 容器软删除:
containerDeleteRetentionPolicy.enabled = true,配置了7天保留期
配置命中接口限制后,请求会被直接拦截返回报错。
补充说明:az storage blob directory delete系列命令仅适配开启了分层命名空间(HNS)的ADLS Gen2存储账户,未开启HNS的普通通用v2存储账户只有虚拟目录(基于Blob前缀模拟),本身不支持原生目录原子操作,使用该命令也会出现各类兼容问题。
可行解决方案
根据场景选其中一种即可消除报错:
- 方案1:临时关闭软删除配置,执行删除后再恢复
该方案适合必须使用目录原子删除接口的场景,操作步骤如下:- 执行以下命令关闭两项不兼容的软删除配置:
# 关闭Blob软删除 az storage account blob-service-properties update --account-name ${my_acc_name[$i]} --enable-delete-retention false # 关闭容器软删除 az storage account blob-service-properties update --account-name ${my_acc_name[$i]} --enable-container-delete-retention false- 等待1-2分钟让存储侧配置生效,重新执行原来的递归删除命令即可。
- 删除操作完成后,如果需要保留软删除的数据保护能力,重新执行命令把两项配置改回开启状态、保留期设为原有的7天即可。
- 方案2:不修改现有账户配置,换用兼容软删除的批量删除命令
如果软删除是合规要求必须保持开启的配置,直接放弃目录删除接口,改用Blob批量删除接口即可,该接口走标准Blob服务API,不受上述特性限制:
该命令对开启/未开启HNS的存储账户都兼容,删除逻辑和递归删除目录的效果完全一致。# 替换原有的blob directory delete命令,自动递归删除指定路径下所有Blob az storage blob delete-batch -c ${my_container[$i]} --account-name ${my_acc_name[$i]} --source-path ${my_source[$i]} - 方案3:未开启HNS的普通存储账户永久替换命令
如果存储账户没有开启分层命名空间,本身就不存在真实目录结构,后续所有类似“目录删除”的操作都直接使用az storage blob delete-batch命令,不要使用blob directory系列的ADLS Gen2专属命令,从根源避免兼容问题。
内容的提问来源于stack exchange,提问作者Yogendra Singh Rathore
相关产品推荐
相关产品推荐

