你可能会在某个时候需要找到一种既便宜又高效的解决方案来存储你的文件,但在哪里找到这个解决方案呢?看看微软Azure的二进制大对象(Blob)存储吧!Blob存储是Azure存储服务之一,允许你存储大量的文本和二进制数据文件、流内容,甚至是用于分发的静态内容。
在本教程中,你将通过一些常见的例子学习如何在Azure中使用Blob存储。
继续阅读,开始吧!
先决条件
本教程将进行实际演示。如果你想跟着操作,请确保已安装并可用以下内容。
- PowerShell 7已安装。
- Az PowerShell模块已安装到你的PowerShell 7环境中。
- AzCopy可执行文件已下载并可访问。
- Azure订阅 – 有多种方式可以以极低或零成本使用特定的Azure资源。
构建 Azure 环境
在使用 Blob 存储存储文件之前,您首先需要导入 PowerShell Core 模块,连接到您的 Azure 订阅并构建 Azure 环境。
1. 启动 PowerShell 7 并运行以下命令以导入将用于在 Blob 存储中存储文件的模块。

2. 接下来,登录到您的Azure Active Directory (AD) 租户,然后运行以下命令在您的 web 浏览器中完成交互式身份验证,如下所示。

始终确保登录后显示的租户和订阅是您打算使用的。如果需要,您可以 更改您的上下文。
3. 现在运行下面的命令来创建一个名为 演示 的新 资源组
,并附加上五个随机数 (Get-Random -Maximum 99999
)。资源组在层次结构上位于订阅之下,并包含允许进行更精细管理的资源。
请注意,资源组的 -Location
在本示例中设置为 Central US
。当命令完成时,它将结果存储在 $resourceGroup
变量中。

运行以下命令执行以下任务并创建一个新的Azure存储帐户。例如,存储帐户命名为storage,并附加五个随机数字(Get-Random -Maximum 99999
)。在命令完成后,$storageAccount
变量将保存返回的对象。

5. 执行以下命令运行Azure AD角色分配的一些任务:
-SignInName
值使用您当前通过Get-AzAccessToken
cmdlet返回的UserID
属性登录的帐户。-RoleDefinitionName
的值是您正在分配的Storage Blob Data Contributor内置角色。-Scope
的值设置了角色分配的范围,用于通过$storageAccount
变量的Id
属性创建的存储帐户(如下所示的storage10029)。
您始终可以根据需要为单个容器提供更精细的角色分配。

6.最后,运行下面的一系列命令以创建一个名为temp.dat的文件在您的本地系统上。您将在接下来的部分中上传和下载此文件,以演示 Blob 存储的工作原理。

通过 PowerShell 上传文件
现在您已经建立了一个Azure环境并创建了一个示例文件,让我们开始将文件上传到Blob存储。Blob存储的工作方式与标准文件系统不同。Blob存储中的每个文件都是一个对象,并保存在容器中。
Blob的核心功能与其他文件系统类似,但有一些用例可能使其中一个成为更好的解决方案。Blob甚至可以支持虚拟文件系统(例如BlobFuse)。
Microsoft提供了多种方法通过PowerShell、AzCopy和Azure门户上传文件到您的存储账户。但让我们首先通过PowerShell将示例文件(temp.dat)上传到Blob存储。PowerShell为您提供了与Azure存储账户一致的体验。
执行此演示所需的操作将产生成本。在您不再打算使用它们时,请监控您的消耗并删除资源。
运行以下命令创建一个新的容器并将temp.dat文件($file
)作为对象上传。此示例中容器的名称为demo,但您可以根据需要选择不同的名称。

通过 AzCopy 上传文件
也许您有更复杂的用例,例如在不同账户之间同步内容或复制内容。如果是这样,AzCopy 命令行工具是您所需的。
运行下面的命令登录到您的Azure租户,并将本地文件 ($file
) 复制到容器的 URL 终点。由于 AzCopy 不知道您在 PowerShell 中使用的凭据,您需要登录到 Azure 租户。

如果您想通过 AzCopy 下载文件而不是上传,请运行下面的命令来
复制
指定的文件(temp.dat
)从您的容器到当前本地目录:& .\azopy.exe copy "$($container.CloudBlobContainer.Uri.AbsoluteUri)/temp.dat" .\temp.dat
通过 Azure 门户上传文件
如果您喜欢通过图形界面上传文件,那么Azure Storage Explorer是您的好帮手。Azure Storage Explorer 是管理 blob 存储的最佳图形方法之一。您可以从 Azure 门户中的存储账户资源访问存储资源管理器。
1. 打开您喜爱的网络浏览器,并导航到 Azure 门户中的存储资源管理器。
2. 单击 演示 容器下的 BLOB CONTAINERS,如下所示,然后单击 上传 以访问 上传 blob 窗格(右侧面板)。
3. 现在在 上传 blob 面板上单击文件夹图标以选择要上传的文件(temp.dat)。
最后,点击上传(蓝色按钮)上传您的文件。

上传完成后,您可以关闭上传 blob窗格并查看您上传的 blob,如下图所示。

通过 Azure 门户下载文件
与将内容上传到 blob 存储类似,Azure 支持多种方式下载内容。但由于您刚刚通过 Azure 门户上传了一个文件(temp.dat),让我们使用 Azure 门户中的 Azure 存储资源管理器下载相同的文件。
选择要下载的文件(temp.dat)并单击 Azure 存储资源管理器中的下载按钮,如下图所示。这样做会打开一个新的对话框,以确认您将在下一步中看到的下载。

现在点击点击此处开始下载按钮,以下载您选择的文件。

通过 PowerShell 下载文件
与上传文件类似,您还可以通过在 PowerShell 中运行命令来从 blob 存储中下载文件。使用 PowerShell,您可以列出容器中的对象,然后将它们下载下来。
运行以下命令以列出容器中的所有对象,并将temp.dat下载到您的本地目录。

如果您更喜欢使用短暂的唯一链接来下载文件,您可以使用共享访问签名(SAS)令牌来创建预授权的下载链接。这些令牌是独特且私密的身份验证令牌,可用于验证您的访问权限。
运行以下命令创建文件(temp.dat
)的新下载链接。生成的下载链接在10秒后过期,将使用该链接下载内容到$temp
变量中(Invoke-WebRequest $uri
)。

在Blob Storage上托管公共互联网上的网页
到目前为止,您已经看到了由经过身份验证的用户下载文件的用例。但您知道吗,Blob Storage也可以为公共内容提供一个出色的选择?一个例子是使用Blob来托管您的网页内容,在这个演示中,您将完成这个任务。
即使您的网页内容在传输和静止时都是加密的,只要设置了公共访问权限,任何人都可以访问这些内容。
由于您正在设置一个不同的用例,您将会利用公共云的一个主要优势,即规模和弹性。您可以为特定的用例提供一个新的存储账户,并限制使用公共容器的风险。
1. 运行下面的命令来创建一个新的存储账户,就像您在“构建Azure环境”部分的第四步中所做的那样。但这次,您将把返回的对象传递给$publicStorageAccount
变量。

现在您有了一个专用的存储账户用于您的公共内容,并且您可以使用以下命令配置它来托管静态网络内容。
2. 接下来,运行Enable-AzStorageStaticWebsite
命令来为您的新用例配置存储账户($publicStorageAccount
)。-IndexDocument
设置您想要呈现给用户的默认网页。-Context
将是您刚刚创建的新存储账户。

3. 运行下面的命令在当前目录中创建一个新的HTML文档,并将该文档上传到专门用于托管网络内容的容器中。内容类型设置为HTML(ContentType="text/html"
),这样网页浏览器可以正确解释文档。
在网页浏览器中访问文档将打印Hello from <storage account name>消息。

4. 现在运行以下命令以获取用户访问内容的URL。

5. 最后,在浏览器中打开URL,您将看到类似以下截图。

清理资源
现在您已经测试了在使用Blob存储中尝试这些新概念,您可能希望清理资源。为什么呢?这样做有助于保持订阅的清洁。更重要的是,您停止产生额外的费用。
由于本教程中使用的所有资源都在一个资源组中,您可以通过删除资源组来清理所有资源。
资源并不总是包含在单个资源组中,这说明在频繁测试或迭代时,合理使用逻辑分割是有益的。
运行以下Remove-AzResourceGroup
命令,指定$resourceGroup
变量的ResourceGroupName
属性,以删除资源组及其内部的所有资源。

结论
在本教程中,您涉及了在不同平台上将文件上传和下载到Blob中的云存储。您还了解到可以从Blob存储中托管可以公开访问的网页。
你可以通过 Blob 存储和其他存储类型做更多事情,那么你会如何构建这些概念呢?也许可以使用文件存储账户,提供无服务器文件系统,或者在 Azure 虚拟机中使用页面 Blob 来创建虚拟硬盘?