如何在Azure Data Lake Gen2的YAML脚本中为容器创建目录?
问题原因
你当前的写法无效是因为ADLS Gen2的目录不属于Azure资源管理器(ARM)可直接管理的资源类型,Microsoft.Storage/storageAccounts/blobServices/containers仅用于创建容器(即ADLS Gen2中的文件系统),无法通过嵌套路径的方式创建目录。目录本质是blob的虚拟前缀,需通过存储服务API或工具创建。
解决方案:使用部署脚本创建目录
可以在ARM模板中添加Microsoft.Resources/deploymentScripts资源,通过Azure CLI命令在容器创建完成后自动生成目录。以下是修改后的完整资源片段:
"resources": [ { "name": "[parameters('dataLakeGen2Name')]", "type": "Microsoft.Storage/storageAccounts", "location": "[parameters('location')]", "apiVersion": "2019-06-01", "sku": { "name": "[parameters('skuName')]", "tier": "Standard" }, "kind": "[parameters('accountKind')]", "tags": {}, "properties": { "isHnsEnabled": true } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2021-08-01", "name": "[format('{0}/{1}/{2}', parameters('dataLakeGen2Name'), 'default', 'interlocking-incoming')]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', parameters('dataLakeGen2Name'))]" ] }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2021-08-01", "name": "[format('{0}/{1}/{2}', parameters('dataLakeGen2Name'), 'default', 'interlocking-processing')]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', parameters('dataLakeGen2Name'))]" ] }, { "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2020-10-01", "name": "CreateAdlsDirectory", "location": "[parameters('location')]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', parameters('dataLakeGen2Name'), 'default', 'interlocking-processing')]" ], "kind": "AzureCLI", "properties": { "azCliVersion": "2.30.0", "scriptContent": "az storage fs directory create -n failed -f interlocking-processing --account-name [parameters('dataLakeGen2Name')] --auth-mode login", "cleanupPreference": "OnSuccess", "retentionInterval": "PT1H" } } ]
关键说明
- 先单独创建
interlocking-processing容器,不要在容器资源中嵌套目录路径 - 部署脚本资源通过
dependsOn关联容器,确保容器创建完成后再执行目录创建命令 scriptContent中的命令使用az storage fs directory create,因为ADLS Gen2启用HNS后,容器对应为文件系统(fs),目录通过该命令创建- 如果需要创建多级目录,可修改命令为
az storage fs directory create -n parent/child/failed -f interlocking-processing ...,会自动创建不存在的父目录
内容的提问来源于stack exchange,提问作者aadilp1910
相关产品推荐
相关产品推荐

