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

如何通过Azure CLI或ARM模板在ADLS Gen2存储账户创建Blob容器及目录

实现方案

可以通过Azure CLI完成ADLS Gen2存储账户的Blob容器和内部目录创建,且支持仅在路径不存在时执行操作,可直接集成到Azure Pipeline中。

前置说明

ADLS Gen2开启了层级命名空间,目录是原生资源,无需用空Blob模拟,直接使用az storage fs系列命令操作即可,所有操作默认是幂等的,结合判断逻辑可以完全满足仅不存在时创建的需求。

Azure CLI 脚本实现

Bash 版本(适配Linux代理)

# 可直接替换为Azure Pipeline变量,如$(storageAccountName)
STORAGE_ACCOUNT_NAME="实际存储账户名"
FILE_SYSTEM_NAME="目标容器名"
TARGET_DIR_PATH="目标目录路径,示例:data/logs/2024"

# 校验容器是否存在,不存在则创建
fs_exists=$(az storage fs exists --name $FILE_SYSTEM_NAME --account-name $STORAGE_ACCOUNT_NAME --query "exists" -o tsv)
if [ "$fs_exists" = "false" ]; then
    az storage fs create --name $FILE_SYSTEM_NAME --account-name $STORAGE_ACCOUNT_NAME
    echo "容器${FILE_SYSTEM_NAME}创建完成"
else
    echo "容器${FILE_SYSTEM_NAME}已存在,跳过创建"
fi

# 校验目录是否存在,不存在则递归创建
dir_exists=$(az storage fs directory exists --file-system $FILE_SYSTEM_NAME --name $TARGET_DIR_PATH --account-name $STORAGE_ACCOUNT_NAME --query "exists" -o tsv)
if [ "$dir_exists" = "false" ]; then
    az storage fs directory create --file-system $FILE_SYSTEM_NAME --name $TARGET_DIR_PATH --account-name $STORAGE_ACCOUNT_NAME --recursive
    echo "目录${TARGET_DIR_PATH}创建完成"
else
    echo "目录${TARGET_DIR_PATH}已存在,跳过创建"
fi

PowerShell 版本(适配Windows代理)

$STORAGE_ACCOUNT_NAME = "实际存储账户名"
$FILE_SYSTEM_NAME = "目标容器名"
$TARGET_DIR_PATH = "目标目录路径,示例:data/logs/2024"

# 校验容器是否存在
$fs_exists = az storage fs exists --name $FILE_SYSTEM_NAME --account-name $STORAGE_ACCOUNT_NAME --query "exists" -o tsv
if ($fs_exists -eq "false") {
    az storage fs create --name $FILE_SYSTEM_NAME --account-name $STORAGE_ACCOUNT_NAME
    Write-Host "容器$FILE_SYSTEM_NAME创建完成"
} else {
    Write-Host "容器$FILE_SYSTEM_NAME已存在,跳过创建"
}

# 校验目录是否存在
$dir_exists = az storage fs directory exists --file-system $FILE_SYSTEM_NAME --name $TARGET_DIR_PATH --account-name $STORAGE_ACCOUNT_NAME --query "exists" -o tsv
if ($dir_exists -eq "false") {
    az storage fs directory create --file-system $FILE_SYSTEM_NAME --name $TARGET_DIR_PATH --account-name $STORAGE_ACCOUNT_NAME --recursive
    Write-Host "目录$TARGET_DIR_PATH创建完成"
} else {
    Write-Host "目录$TARGET_DIR_PATH已存在,跳过创建"
}

Azure Pipeline 集成配置

直接使用内置的Azure CLI任务即可,无需额外配置权限,任务会自动使用配置的Azure服务连接进行身份验证,示例YAML如下:

- task: AzureCLI@2
  inputs:
    azureSubscription: '你的Azure服务连接名称'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      STORAGE_ACCOUNT_NAME="$(storageAccountName)"
      FILE_SYSTEM_NAME="$(containerName)"
      TARGET_DIR_PATH="$(targetDirPath)"
      
      fs_exists=$(az storage fs exists --name $FILE_SYSTEM_NAME --account-name $STORAGE_ACCOUNT_NAME --query "exists" -o tsv)
      if [ "$fs_exists" = "false" ]; then
          az storage fs create --name $FILE_SYSTEM_NAME --account-name $STORAGE_ACCOUNT_NAME
      fi
      
      dir_exists=$(az storage fs directory exists --file-system $FILE_SYSTEM_NAME --name $TARGET_DIR_PATH --account-name $STORAGE_ACCOUNT_NAME --query "exists" -o tsv)
      if [ "$dir_exists" = "false" ]; then
          az storage fs directory create --file-system $FILE_SYSTEM_NAME --name $TARGET_DIR_PATH --account-name $STORAGE_ACCOUNT_NAME --recursive
      fi
  displayName: '校验并创建ADLS Gen2容器和目录'

可选:ARM模板实现

ARM模板本身是幂等的,部署时如果资源已存在会直接跳过创建,无需手动编写判断逻辑,示例模板如下:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string"
    },
    "containerName": {
      "type": "string"
    },
    "directoryPath": {
      "type": "string"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
      "apiVersion": "2023-01-01",
      "name": "[concat(parameters('storageAccountName'), '/default/', parameters('containerName'))]",
      "properties": {}
    },
    {
      "type": "Microsoft.Storage/storageAccounts/blobServices/containers/directories",
      "apiVersion": "2023-01-01",
      "name": "[concat(parameters('storageAccountName'), '/default/', parameters('containerName'), '/', parameters('directoryPath'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', parameters('storageAccountName'), 'default', parameters('containerName'))]"
      ],
      "properties": {}
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:03