在 Azure Stack Hub 存储中使用数据传输工具
Azure Stack Hub 提供一组存储服务,适用于磁盘、Blob、表、队列以及帐户管理功能。 如果需要通过 Azure Stack Hub 存储管理或移动数据,可以使用一些 Azure 存储工具。 本文概述了可用的工具。
你的需求决定了以下哪些工具最适合你:
-
一个特定于存储的命令行实用工具,下载后即可在存储帐户中将数据从一个对象复制到另一个对象,或者在存储帐户之间复制。
-
一种基于任务的命令行 Shell 和脚本语言,专为系统管理而设计。
-
一种开源的跨平台工具,提供了一组适用于 Azure 和 Azure Stack Hub 平台的命令。
-
一个易于使用的独立应用,带有用户界面。
-
一个适用于 Azure Blob 存储的虚拟文件系统驱动程序,用于通过 Linux 文件系统访问存储帐户中的现有块 Blob 数据。
由于 Azure 和 Azure Stack Hub 之间具有存储服务差异,因此,以下部分中描述的每个工具可能存在一些特定的要求。 若要了解 Azure Stack Hub 存储和 Azure 存储之间的比较情况,请参阅 Azure Stack Hub 存储:差异和注意事项。
AzCopy
AzCopy 是一个命令行实用程序,专用于通过简单的可以优化性能的命令将数据复制到 Azure Blob、表存储以及从这些位置复制数据。 可在存储帐户中将数据从一个对象复制到另一个对象,或者在存储帐户之间复制。
下载并安装 AzCopy
AzCopy 10.1 配置和限制
AzCopy 10.1 现在可以配置为使用旧版 API。 这样就可以为 Azure Stack Hub 提供(有限的)支持。
若要将 AzCopy 的 API 版本配置为支持 Azure Stack Hub,请将 AZCOPY_DEFAULT_SERVICE_API_VERSION
环境变量设置为 2017-11-09
。
操作系统 | 命令 |
---|---|
Windows | 在命令提示符处使用 set AZCOPY_DEFAULT_SERVICE_API_VERSION=2017-11-09 在 PowerShell 中使用 $env:AZCOPY_DEFAULT_SERVICE_API_VERSION="2017-11-09" |
Linux | export AZCOPY_DEFAULT_SERVICE_API_VERSION=2017-11-09 |
MacOS | export AZCOPY_DEFAULT_SERVICE_API_VERSION=2017-11-09 |
在 AzCopy 10.1 中,支持适用于 Azure Stack Hub 的以下功能:
功能 | 支持的操作 |
---|---|
管理容器 | 创建容器 列出容器的内容 |
管理作业 | 显示作业 恢复作业 |
删除 Blob | 删除单个 Blob 删除整个或部分虚拟目录 |
上传文件 | 上传文件 上传目录 上传目录的内容 |
下载文件 | 下载文件 下载目录 下载目录的内容 |
同步文件 | 将容器同步到本地文件系统 将本地文件系统同步到容器 |
注意
- Azure Stack Hub 不支持使用 Microsoft Entra ID 向 AzCopy 提供授权凭据。 必须使用共享访问签名 (SAS) 令牌访问 Azure Stack Hub 上的存储对象。
- Azure Stack Hub 不支持在两个 Azure Stack Hub Blob 位置之间以及 Azure 存储和 Azure Stack Hub 之间进行同步数据传输。 不能直接在 AzCopy 10.1 中使用“azcopy cp”将数据从 Azure Stack Hub 移到 Azure 存储(反之亦然)。
针对数据传输的 AzCopy 命令示例
以下示例展示了将数据复制到 Azure Stack Hub Blob 以及从这些位置复制数据的典型方案。 若要了解详细信息,请参阅 AzCopy 入门。
将所有 Blob 下载到本地磁盘
azcopy cp "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/directory]?[SAS]" "/path/to/dir" --recursive=true
将单个文件上传到虚拟目录
azcopy cp "/path/to/file.txt" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/blob]?[SAS]"
AzCopy 已知问题
- 在文件存储上执行的任何 AzCopy 操作都不可用,因为文件存储在 Azure Stack Hub 中不可用。
- 若要使用 AzCopy 10.1 在两个 Azure Stack Hub Blob 位置之间或 Azure Stack Hub 和 Azure 存储之间传输数据,需先将数据下载到本地位置,然后将数据重新上传到 Azure Stack Hub 或 Azure 存储上的目标目录。 也可使用 AzCopy 7.1 通过 /SyncCopy 选项来指定传输,以便复制数据。
- AzCopy 的 Linux 版本仅支持 1802 更新或更高版本,不支持表服务。
- 如果要向/从 Azure 表存储服务复制数据,则安装 AzCopy 版本 7.3.0
Azure PowerShell
Azure PowerShell 是一个模块,它提供的 cmdlet 用于管理 Azure 和 Azure Stack Hub 上的服务。 这是一种基于任务的命令行 Shell 和脚本语言,专为系统管理而设计。
安装和配置适用于 Azure Stack Hub 的 PowerShell
需要安装与 Azure Stack Hub 兼容的 Azure PowerShell 模块才能使用 Azure Stack Hub。 有关详细信息,请参阅安装适用于 Azure Stack Hub 的 PowerShell 和配置 Azure Stack Hub 用户的 PowerShell 环境。
适用于 Azure Stack Hub 的 PowerShell 示例脚本
此示例假定你已成功安装了适用于 Azure Stack Hub 的 PowerShell。 此脚本会帮助你完成配置,然后要求你提供 Azure Stack Hub 租户凭据,以便将你的帐户添加到本地 PowerShell 环境。 然后,该脚本会设置默认的 Azure 订阅、在 Azure 中创建新的存储帐户、在此新的存储帐户中创建新容器,并将现有图像文件 (Blob) 上传到该容器。 在脚本列出该容器中的所有 Blob 后,它会在本地计算机中创建新的目标目录,并下载图像文件。
- 安装 Azure Stack Hub 兼容的 Azure PowerShell 模块。
- 下载使用 Azure Stack Hub 所需的工具。
- 打开 Windows PowerShell ISE,选择“以管理员身份运行”, 然后单击“文件” > “新建”以创建新的脚本文件。
- 复制下面的脚本并将其粘贴到新的脚本文件。
- 根据配置设置更新脚本变量。
注意
此脚本必须在 AzureStack_Tools 的根目录中运行。
# begin
$ARMEvnName = "AzureStackUser" # set AzureStackUser as your Azure Stack Hub environment name
$ARMEndPoint = "https://management.local.azurestack.external"
$GraphAudience = "https://graph.chinacloudapi.cn/"
$AADTenantName = "<myDirectoryTenantName>.partner.onmschina.cn"
$SubscriptionName = "basic" # Update with the name of your subscription.
$ResourceGroupName = "myTestRG" # Give a name to your new resource group.
$StorageAccountName = "azsblobcontainer" # Give a name to your new storage account. It must be lowercase.
$Location = "Local" # Choose "Local" as an example.
$ContainerName = "photo" # Give a name to your new container.
$ImageToUpload = "C:\temp\Hello.jpg" # Prepare an image file and a source directory in your local computer.
$DestinationFolder = "C:\temp\download" # A destination directory in your local computer.
# Import the Connect PowerShell module"
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Import-Module .\Connect\AzureStack.Connect.psm1
# Configure the PowerShell environment
# Register an Az environment that targets your Azure Stack Hub instance
Add-AzEnvironment -Name $ARMEvnName -ARMEndpoint $ARMEndPoint
# Login
$TenantID = Get-AzsDirectoryTenantId -AADTenantName $AADTenantName -EnvironmentName $ARMEvnName
Connect-AzAccount -EnvironmentName $ARMEvnName -TenantId $TenantID
# Set a default Azure subscription.
Select-AzSubscription -SubscriptionName $SubscriptionName
# Create a new Resource Group
New-AzResourceGroup -Name $ResourceGroupName -Location $Location
# Create a new storage account.
New-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -Location $Location -Type Standard_LRS
# Set a default storage account.
Set-AzCurrentStorageAccount -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName
# Create a new container.
New-AzStorageContainer -Name $ContainerName -Permission Off
# Upload a blob into a container.
Set-AzStorageBlobContent -Container $ContainerName -File $ImageToUpload
# List all blobs in a container.
Get-AzStorageBlob -Container $ContainerName
# Download blobs from the container:
# Get a reference to a list of all blobs in a container.
$blobs = Get-AzStorageBlob -Container $ContainerName
# Create the destination directory.
New-Item -Path $DestinationFolder -ItemType Directory -Force
# Download blobs into the local destination directory.
$blobs | Get-AzureStorageBlobContent -Destination $DestinationFolder
# end
PowerShell 已知问题
Get-AzStorageAccountKey 差异
目前兼容的 Azure Stack Hub 的 Azure PowerShell 模块版本为 1.2.11,用于用户操作。 它不同于最新版本的 Azure PowerShell。 这种差异以下述方式影响存储服务操作:
在版本 1.2.11 中,Get-AzStorageAccountKey
的返回值格式有两个属性:Key1
和 Key2
,而当前的 Azure 版本返回的数组包含所有帐户密钥。
# This command gets a specific key for a storage account,
# and works for Azure PowerShell version 1.4, and later versions.
(Get-AzStorageAccountKey -ResourceGroupName "RG01" `
-AccountName "MyStorageAccount").Value[0]
# This command gets a specific key for a storage account,
# and works for Azure PowerShell version 1.3.2, and previous versions.
(Get-AzStorageAccountKey -ResourceGroupName "RG01" `
-AccountName "MyStorageAccount").Key1
有关详细信息,请参阅 Get-AzureRMStorageAccountKey。
在 Azure Stack Hub 群集之间复制 blob
Start-AzStorageBlobCopy
可用于启动复制作业以移动 blob。 将属性 AbsoluteUri
设置为另一个 Azure Stack Hub 群集上的 blob URI 时,此 cmdlet 可用于在两个 Azure Stack Hub 群集之间复制 blob。 确保源和目标 Azure Stack Hub 群集在同一更新版本上。 Azure Stack Hub 目前不支持使用 Start-AzStorageBlobCopy
在两个部署了不同更新版本的 Azure Stack Hub 群集之间复制 blob。
Azure CLI
Azure CLI 是 Azure 的命令行体验,用于管理 Azure 资源。 可以将其安装在 macOS、Linux 和 Windows 上,然后从命令行运行。
Azure CLI 经过优化,可用于从命令行管理 Azure 资源,以及生成可以针对 Azure 资源管理器运行的自动化脚本。 它提供 Azure Stack Hub 门户所提供的许多功能,包括各种数据访问功能。
Azure Stack Hub 需要 Azure CLI 2.0 版或更高版本。 若要详细了解如何通过 Azure Stack Hub 来安装和配置 Azure CLI,请参阅安装和配置 Azure Stack Hub CLI。 若要详细了解如何使用 Azure CLI 执行多个可利用 Azure Stack Hub 存储帐户中的资源的任务,请参阅将 Azure CLI 与 Azure 存储配合使用。
适用于 Azure Stack Hub 的 Azure CLI 示例脚本
完成 CLI 安装和配置后,可尝试以下步骤,使用一个小的 shell 示例脚本来与 Azure Stack Hub 存储资源交互。 此脚本完成以下操作:
- 在存储帐户中创建一个新容器。
- 将一个现有文件(作为 Blob)上传到该容器。
- 列出该容器中的所有 Blob。
- 将文件下载到本地计算机上的指定目标。
运行此脚本之前,请确保可以成功连接并登录到目标 Azure Stack Hub。
- 打开偏好的文本编辑器,将前面的脚本复制并粘贴到编辑器中。
- 更新脚本的变量,使之反映配置设置。
- 更新所需的变量后,保存脚本并退出编辑器。 后续步骤假定已将脚本命名为 my_storage_sample.sh 。
- 如果需要,请将脚本标记为可执行文件:
chmod +x my_storage_sample.sh
- 执行该脚本。 例如,在 Bash 中:
./my_storage_sample.sh
#!/bin/bash
# A simple Azure Stack Hub storage example script
export AZURESTACK_RESOURCE_GROUP=<resource_group_name>
export AZURESTACK_RG_LOCATION="local"
export AZURESTACK_STORAGE_ACCOUNT_NAME=<storage_account_name>
export AZURESTACK_STORAGE_CONTAINER_NAME=<container_name>
export AZURESTACK_STORAGE_BLOB_NAME=<blob_name>
export FILE_TO_UPLOAD=<file_to_upload>
export DESTINATION_FILE=<destination_file>
echo "Creating the resource group..."
az group create --name $AZURESTACK_RESOURCE_GROUP --location $AZURESTACK_RG_LOCATION
echo "Creating the storage account..."
az storage account create --name $AZURESTACK_STORAGE_ACCOUNT_NAME --resource-group $AZURESTACK_RESOURCE_GROUP --account-type Standard_LRS
echo "Creating the blob container..."
az storage container create --name $AZURESTACK_STORAGE_CONTAINER_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME
echo "Uploading the file..."
az storage blob upload --container-name $AZURESTACK_STORAGE_CONTAINER_NAME --file $FILE_TO_UPLOAD --name $AZURESTACK_STORAGE_BLOB_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME
echo "Listing the blobs..."
az storage blob list --container-name $AZURESTACK_STORAGE_CONTAINER_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME --output table
echo "Downloading the file..."
az storage blob download --container-name $AZURESTACK_STORAGE_CONTAINER_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME --name $AZURESTACK_STORAGE_BLOB_NAME --file $DESTINATION_FILE --output table
echo "Done"
Microsoft Azure 存储资源管理器
Azure 存储资源管理器是 Microsoft 提供的独立应用, 它可用来在 Windows、macOS 和 Linux 计算机上轻松处理 Azure 存储和 Azure Stack Hub 存储数据。 如果希望通过某种方式轻松管理 Azure Stack Hub 存储数据,请考虑使用 Microsoft Azure 存储资源管理器。
- 若要详细了解如何配置 Azure 存储资源管理器,使之能够用于 Azure Stack Hub,请参阅将存储资源管理器连接到 Azure Stack Hub 订阅。
- 若要详细了解 Microsoft Azure 存储资源管理器,请参阅存储资源管理器入门
Blobfuse
Blobfuse 是适用于 Azure Blob 存储的虚拟文件系统驱动程序,用于通过 Linux 文件系统访问存储帐户中的现有块 Blob 数据。 Azure Blob 存储是一项对象存储服务,因此没有分层命名空间。 Blobfuse 使用虚拟目录方案提供这种命名空间,并使用正斜杠“/
”作为分隔符。 Blobfuse 同时适用于 Azure 和 Azure Stack Hub。
若要详细了解如何使用 Linux 上的 Blobfuse 将 Blob 存储装载为文件系统,请参阅如何使用 Blobfuse 将 Blob 存储装载为文件系统。
对于 Azure Stack Hub,在配置存储帐户凭据时,除了 accountName、accountKey/sasToken、containerName 之外,还需要指定 blobEndpoint。
在 Azure Stack 开发工具包 (ASDK) 中,blobEndpoint 应当为 myaccount.blob.local.azurestack.external
。 在 Azure Stack Hub 集成系统中,如果不确定你的终结点,请与云管理员联系。
accountKey 和 sasToken 一次只能配置一个。 提供存储帐户密钥时,凭据配置文件采用以下格式:
accountName myaccount
accountKey myaccesskey==
containerName mycontainer
blobEndpoint myaccount.blob.local.azurestack.external
提供共享访问密钥时,凭据配置文件采用以下格式:
accountName myaccount
sasToken ?mysastoken
containerName mycontainer
blobEndpoint myaccount.blob.local.azurestack.external