快速入门:使用 Azure CLI 创建和管理 Azure 文件共享

本指南介绍通过 Azure CLI 来使用 Azure 文件共享的基本知识。 Azure 文件共享与其他文件共享一样,只不过是存储在云中并由 Azure 平台提供支持。 Azure 文件共享支持行业标准 SMB 协议,可以跨多个计算机、应用程序和实例进行文件共享。

如果没有 Azure 订阅,可在开始前创建一个 1 元人民币试用帐户

对于本文中的步骤,必须运行 Azure CLI 2.0.4 或更高版本。 若要查找 Azure CLI 版本,请运行 az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI 2.0

默认情况下,Azure CLI 命令返回 JavaScript 对象表示法 (JSON)。 JSON 是通过 REST API 发送和接收消息的标准方式。 为了便于处理 JSON 响应,本文中的某些示例使用基于 Azure CLI 命令的 query 参数。 该参数使用 JMESPath 查询语言来分析 JSON。 若要详细了解如何按照 JMESPath 查询语言的规范来使用 Azure CLI 命令的结果,请参阅 JMESPath tutorial(JMESPath 教程)。

登录 Azure

如果在本地使用 Azure CLI,请打开一个提示符窗口并登录到 Azure(如果尚未这样做)。

az login

创建资源组

资源组是在其中部署和管理 Azure 资源的逻辑容器。 如果还没有 Azure 资源组,可以使用 az group create 命令创建一个。

以下示例在“中国东部”位置创建名为 myResourceGroup 的资源组:

az group create --name myResourceGroup --location chinaeast

创建存储帐户

存储帐户是一个存储共享池,在其中可以部署 Azure 文件共享或其他存储资源,例如 Blob 或队列。 一个存储帐户可以包含无数个文件共享。 一个共享可以存储无数个文件,直到达到存储帐户的容量限制为止。

以下示例使用 az storage account create 命令创建名为 mystorageaccount<随机数字> 的存储帐户,然后将该存储帐户的名称置于 $STORAGEACCT 变量中。 存储帐户名称必须唯一。 使用 $RANDOM 将一个数字追加到存储帐户名称末尾即可使之变得唯一。

STORAGEACCT=$(az storage account create \
    --resource-group "myResourceGroup" \
    --name "mystorageacct$RANDOM" \
    --location chinaeast \
    --sku Standard_LRS \
    --query "name" | tr -d '"')

获取存储帐户密钥

存储帐户密钥控制对存储帐户中资源的访问。 这些密钥是在创建存储帐户时自动创建的。 可以使用 az storage account keys list 命令获取存储帐户的存储帐户密钥:

STORAGEKEY=$(az storage account keys list \
    --resource-group "myResourceGroup" \
    --account-name $STORAGEACCT \
    --query "[0].value" | tr -d '"')

创建 Azure 文件共享

现在可以创建第一个 Azure 文件共享了。 请使用 az storage share create 命令创建文件共享。 以下示例创建名为 myshare 的 Azure 文件共享:

az storage share create \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare" 

共享名称只能包含小写字母、数字和单个连字符(但不能以连字符开头)。 有关为文件共享和文件命名的完整详细信息,请参阅 命名和引用共享、目录、文件和元数据

使用 Azure 文件共享

Azure 文件提供两种在 Azure 文件共享中使用文件和文件夹的方法:行业标准服务器消息块 (SMB) 协议文件 REST 协议

若要通过 SMB 装载文件共享,请参阅下述基于 OS 的文档:

将 Azure 文件共享与文件 REST 协议配合使用

可以直接使用文件 REST 协议(即手动进行 REST HTTP 调用),但最常见的使用文件 REST 协议的方式是使用 Azure CLI、AzureRM PowerShell 模块或 Azure 存储 SDK,所有这些方式都可以在所选脚本/编程语言中为文件 REST 协议提供很好的包装器。

我们预计,在使用 Azure 文件时,大多数情况下需要通过 SMB 协议来使用 Azure 文件共享,因为这样可以使用那些预期可以使用的现有应用程序和工具,但某些情况下,使用文件 REST API 比使用 SMB 更具优势,例如:

  • 需要通过 PowerShell(不能通过 SMB 来装载文件共享)来浏览文件共享。
  • 需在无法装载 SMB 共享的客户端(例如未将端口 445 解除阻止的本地客户端)中执行脚本或应用程序。
  • 需利用无服务器资源,例如 Azure Functions

以下示例介绍如何使用 AzureRM PowerShell 模块通过文件 REST 协议来操作 Azure 文件共享。

创建目录

若要在 Azure 文件共享的根目录中创建名为 myDirectory 的新目录,请使用 az storage directory create 命令:

az storage directory create \
   --account-name $STORAGEACCT \
   --account-key $STORAGEKEY \
   --share-name "myshare" \
   --name "myDirectory" 

上传文件

若要演示如何使用 az storage file upload 命令来上传文件,请首先在 Cloud Shell 暂存驱动器上创建要上传的文件。 以下示例创建并上传该文件:

date > ~/clouddrive/SampleUpload.txt

az storage file upload \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --source "~/clouddrive/SampleUpload.txt" \
    --path "myDirectory/SampleUpload.txt"

如果在本地运行 Azure CLI,请将 ~/clouddrive 替换为计算机上的现有路径。

上传文件以后,即可使用 az storage file list 命令,确保文件已上传到 Azure 文件共享:

az storage file list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory" \
    --output table

下载文件

可以使用 az storage file download 命令下载已上传到 PowerShell 暂存驱动器的文件的副本:

# Delete an existing file by the same name as SampleDownload.txt, if it exists, because you've run this example before
rm -rf ~/clouddrive/SampleDownload.txt

az storage file download \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory/SampleUpload.txt" \
    --dest "~/clouddrive/SampleDownload.txt"

复制文件

一项常见的任务是将文件从一个文件共享复制到另一个文件共享,或者将文件在文件共享和 Azure Blob 存储容器之间来回复制。 为了演示此功能,请创建一个新的共享。 请使用 az storage file copy 命令将上传的文件复制到该新共享:

az storage share create \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare2"

az storage directory create \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare2" \
    --name "myDirectory2"

az storage file copy start \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --source-share "myshare" \
    --source-path "myDirectory/SampleUpload.txt" \
    --destination-share "myshare2" \
    --destination-path "myDirectory2/SampleCopy.txt"

现在,如果列出新共享中的文件,则应看到已复制的文件:

az storage file list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare2" \
    --output table

虽然 az storage file copy start 命令可以方便地用于 Azure 文件共享和 Azure Blob 存储容器之间的文件移动,但我们仍建议你使用 AzCopy 进行较大型 (就要移动的文件的数量或大小而言)的移动。详细了解 Linux 版 AzCopyWindows 版 AzCopy。 AzCopy 必须安装在本地。 AzCopy 在 Cloud Shell 中不可用。

创建和管理共享快照

可以通过 Azure 文件共享执行的另一项有用的任务是创建共享快照。 快照保存 Azure 文件共享在某个时间点的副本。 共享快照类似于你可能已经熟悉的某些操作系统技术:

SNAPSHOT=$(az storage share snapshot \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare" \
    --query "snapshot" | tr -d '"')

浏览共享快照内容

可以浏览共享快照的内容,只需将变量 $SNAPSHOT 中捕获的共享快照的时间戳传递给 az storage file list 命令即可:

az storage file list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --snapshot $SNAPSHOT \
    --output table

列出共享快照

若要查看为共享生成的快照的列表,请使用以下命令:

az storage share list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --include-snapshot \
    --query "[? name=='myshare' && snapshot!=null]" | tr -d '"'

从共享快照还原

可以使用此前用过的 az storage file copy start 命令还原某个文件。 首先,请删除已上传的 SampleUpload.txt 文件,这样才能将其从快照还原:

# Delete SampleUpload.txt
az storage file delete \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory/SampleUpload.txt"
 # Build the source URI for a snapshot restore
URI=$(az storage account show \
    --resource-group "myResourceGroup" \
    --name $STORAGEACCT \
    --query "primaryEndpoints.file" | tr -d '"')
 URI=$URI"myshare/myDirectory/SampleUpload.txt?sharesnapshot="$SNAPSHOT
 # Restore SampleUpload.txt from the share snapshot
az storage file copy start \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --source-uri $URI \
    --destination-share "myshare" \
    --destination-path "myDirectory/SampleUpload.txt"

删除共享快照

可以使用 az storage share delete 命令删除共享快照。 所使用的变量包含对 --snapshot 参数的 $SNAPSHOT 引用:

az storage share delete \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare" \
    --snapshot $SNAPSHOT

清理资源

完成后,可以使用 az group delete 命令删除资源组和所有相关的资源:

az group delete --name "myResourceGroup"

也可逐一删除资源。

  • 若要删除为本文创建的 Azure 文件共享,请执行以下命令:

    az storage share delete \
        --account-name $STORAGEACCT \
        --account-key $STORAGEKEY \
        --name "myshare" \
        --delete-snapshots include
    
    az storage share delete \
        --account-name $STORAGEACCT \
        --account-key $STORAGEKEY \
        --name "myshare2" \
        --delete-snapshots include
    
  • 若要删除存储帐户本身,请执行以下命令 (这会隐式删除已创建的 Azure 文件共享,以及任何其他可能已创建的存储资源,例如 Azure Blob 存储容器):

    az storage account delete \
        --resource-group "myResourceGroup" \
        --name $STORAGEACCT \
        --yes
    

后续步骤