你可能會在某個時候需要一個廉價但有效的解決方案來存儲你的文件,但你要在哪裡找到這個解決方案呢?看看 Microsoft 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 儲存空間中存儲文件的模組。

雖然超出了本教程的範圍,還有其他身份驗證方法,例如 Service Principal 或使用 access token。

始終確保登錄後顯示的租戶和訂閱是您打算使用的。如有需要,您可以 更改上下文。
3. 現在執行以下命令來創建一個名為 resource group 的新群組,並附加五個隨機數字(Get-Random -Maximum 99999
)。資源組在階層上位於訂閱下方,包含可實現更精細管理的資源。
請注意,此示例的資源組 -Location
設置為 Central US
。當命令完成時,它將結果存儲在 $resourceGroup
變數中。

4. 執行以下命令以執行以下任務並創建一個新的 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)。
微軟提供了多種方法通過 PowerShell、AzCopy 和 Azure Portal 上傳文件到您的儲存帳戶。但讓我們首先通過 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 入口網站上傳檔案
如果您喜歡使用 GUI 方法上傳您的檔案,那麼Azure Storage Explorer是您的好幫手。Azure Storage Explorer 是管理 Blob 儲存的最佳圖形方法之一。您可以從 Azure 入口網站中的儲存帳戶資源訪問儲存資源管理器。
1. 開啟您喜歡的網頁瀏覽器,並導航至 Azure 入口網站中的儲存資源管理器。
2. 在 演示 容器下方的 BLOB CONTAINERS 中,如下所示,然後點擊 上傳 以存取 上傳 blob 刀片(右側面板)。
3. 現在在 上傳 blob 面板上點擊資料夾圖示,選擇要上傳的檔案(temp.dat)。
4. 最后,点击上传(蓝色按钮)来上传你的文件。

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

通过 Azure 门户下载文件
与上传内容到 blob 存储一样,Azure 支持多种方式下载内容。但是由于你刚刚通过 Azure 门户上传了一个文件(temp.dat),让我们使用 Azure Storage Explorer 在 Azure 门户中下载同样的文件。
选择要下载的文件(temp.dat),然后点击 Azure Storage Explorer 中的下载按钮,如下图所示。这样做会打开一个新的对话框来确认你要下载的内容,在下一步中你会看到。

现在点击点击此处开始下载按钮来下载你选择的文件。

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

如果您更喜歡使用短暫的唯一連結來下載文件,您可以使用共享訪問簽名(SAS)令牌來創建預授權的下載連結。這些令牌是獨特且私密的身份驗證令牌,您可以使用它們來驗證您的訪問。
運行以下命令以為您想要下載的文件(temp.dat
)創建新的下載連結。生成的下載連結在10秒後過期,並將使用該連結下載(Invoke-WebRequest $uri
)內容到$temp
變數中。

在Blob Storage上公開互聯網上的網頁
到目前為止,您已經看到了由已驗證用戶下載文件的用例。但您是否知道Blob Storage也可以為公共內容提供一個優秀的選擇?一個例子是使用Blob來托管您的網頁內容,您將在此演示中實現這一點。
即使您的網頁內容在傳輸和靜態狀態下都被加密,如果設置了公共訪問權限,任何人都可以訪問這些內容。
由于您正在设置一个不同的用例,您将利用公共云在规模和弹性方面的主要优势。您可以为特定的用例配置一个新的存储账户,并限制使用公共容器的风险。
1. 运行下面的命令来创建一个新的存储账户,就像您在“构建Azure环境”部分的第四步中所做的那样。但是这次,您将将返回的对象传递给$publicStorageAccount
变量。

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

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

4. 現在執行以下命令以獲取用戶可以訪問您內容的URL。

5. 最後,在瀏覽器中打開URL,您將看到類似以下截圖的內容。

清理資源
現在,您已經通過測試這些在使用Blob存儲方面的新概念,您會希望清理您的資源。為什麼?這樣做可以幫助您保持訂閱的乾淨。更重要的是,您停止產生額外的費用。
由於您在本教程中使用的所有資源都在單個資源組中,您可以通過刪除該資源組來清理所有資源。
資源不總是包含在單個資源組中,這說明在測試或經常迭代時,合理使用邏輯分割是有益的。
執行下面的Remove-AzResourceGroup
cmdlet,指定$resourceGroup
變量的ResourceGroupName
屬性以刪除資源組和其中的所有資源。

結論
在本教程中,您已經學習了如何在不同平台上將文件上傳和下載到雲存儲中的Blob,您還了解了可以從Blob存儲中主機公眾可以訪問的網頁。
您可以通过大量存储和其他存储类型实现更多功能,那么您如何在这些概念基础上构建呢?也许可以使用文件存储账户、提供无服务器文件系统,或者在Azure虚拟机中使用页面 Blob 作为虚拟硬盘?