如何通過 Azure 檔案存儲使用 Blob 存儲

你可能會在某個時候需要一個廉價但有效的解決方案來存儲你的文件,但你要在哪裡找到這個解決方案呢?看看 Microsoft Azure 的 二進位大型物件(blob)存儲 吧!Blob 存儲是 Azure 存儲服務之一,讓你可以存儲大量的文本和二進位數據文件、流式內容,甚至是靜態內容以進行分發。

在這個教程中,你將通過一些常見的示例來學習如何在 Azure 中使用 blob 存儲。

繼續閱讀以了解更多!

先備條件

這個教程將是一個實踐演示。如果你想跟著做,請確保你已經安裝並可用以下工具。

建立 Azure 環境

在使用 Blob 儲存空間存儲文件之前,您首先需要匯入 PowerShell Core 模組,連接到 Azure 訂閱,並建立 Azure 環境。

1. 啟動 PowerShell 7 並執行以下命令,以匯入您將用於在 Blob 儲存空間中存儲文件的模組。

Importing the necessary modules
# Az.Accounts - 提供憑據管理 cmdlets
# Az.Resources - 提供與頂級 Azure 資源提供者一起工作的 cmdlets, 
               # 如訂閱
# Az.Storage - 提供與不同儲存資源一起工作的 cmdlets,如 blob
             # 2。接下來,登錄到您的 Azure Active Directory (AD) 租戶,然後執行以下命令,以在 Web 瀏覽器中完成互動式身份驗證,如下所示。 
Import-Module Az.Accounts, Az.Resources, Az.Storage

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

Connect-AzAccount
Azure Portal interactive login.

始終確保登錄後顯示的租戶和訂閱是您打算使用的。如有需要,您可以 更改上下文

3. 現在執行以下命令來創建一個名為 resource group 的新群組,並附加五個隨機數字(Get-Random -Maximum 99999)。資源組在階層上位於訂閱下方,包含可實現更精細管理的資源。

請注意,此示例的資源組 -Location 設置為 Central US。當命令完成時,它將結果存儲在 $resourceGroup 變數中。

$resourceGroup = New-AzResourceGroup "demo$(Get-Random -Maximum 99999)" -Location 'Central US'
Creating a new resource group

4. 執行以下命令以執行以下任務並創建一個新的 Azure 儲存帳戶。在此示例中,儲存帳戶名稱為 storage,並附加五個隨機數字(Get-Random -Maximum 99999)。命令完成後,$storageAccount 變數將保留返回的物件。

# 使用 ResourceGroupName 屬性傳遞 -ResourceGroupName 
# 你在步驟三中創建的 $resourceGroup 變數。
# 在儲存帳戶名稱 -Name 後附加隨機數字
# 類似於資源組。
# 設置相同的 -Location,與 $resourceGroup 變數的 Location 屬性相同。
# 在父資源組的相同地區放置資源是一種良好的做法。
# 使用本地冗余儲存(LRS)或 Azure 內唯一的名稱,指定儲存帳戶名稱 -SkuName。


$storageAccount = New-AzStorageAccount `
 -ResourceGroupName $resourceGroup.ResourceGroupName `
 -Name storage$(Get-Random -Maximum 99999) `
 -Location $resourceGroup.Location `
 -SkuName Standard_LRS
Creating a new storage account

5. 執行以下命令以執行一些任務,進行 Azure AD 角色分配:

  • -SignInName 值使用您当前通过 Get-AzAccessToken cmdlet 返回的 UserID 属性登录的帐户。
  • -RoleDefinitionName 的值是您正在分配的内置角色 Storage Blob Data Contributor
  • -Scope 值设置了为您通过 $storageAccount 变量的 Id 属性创建的存储帐户 (如下所示的 storage10029) 的角色分配范围。

您始终可以根据需要向各个容器提供 更精细的角色分配

New-AzRoleAssignment `
 -SignInName (Get-AzAccessToken).UserId`
 -RoleDefinitionName "Storage Blob Data Contributor"`
 -Scope $storageAccount.Id
Creating and verifying a new file

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

# 加载 FileStream .NET 类
$file = New-Object System.IO.FileStream .\temp.dat,Create,ReadWrite
# 设置文件的大小
$file.SetLength(10MB)
# 关闭句柄
$file.Close()
# 查找文件以确认大小
(Get-ChildItem $file.Name).Length
Creating and verifying a new file

通过 PowerShell 上传文件

現在您已建立了 Azure 環境並創建了示例文件,讓我們開始將文件上傳到 Blob 儲存體。Blob 儲存體的工作方式與標準檔案系統不同。Blob 儲存體中的每個文件都是一個物件,並保存在容器中。

Blob 的核心功能與其他檔案系統類似,但有些情況下可能其中一種是更好的解決方案。Blob 甚至可以支援虛擬檔案系統(例如 BlobFuse)。

微軟提供了多種方法通過 PowerShell、AzCopy 和 Azure Portal 上傳文件到您的儲存帳戶。但讓我們首先通過 PowerShell 將示例文件(temp.dat)上傳到 Blob 儲存體。PowerShell 讓您可以一致地使用 Azure 儲存帳戶。

執行此示範所需的操作將產生成本。在您不再打算使用它們時,請監控您的使用量並刪除資源。

執行下面的命令以創建一個新容器,並將 temp.dat 文件($file)上傳為一個物件。此示例中容器的名稱為 demo,但您可以按照自己的喜好命名。

# 通過儲存賬戶的上下文屬性在 $storageAccount 內創建容器
# 返回的對象然後傳遞給 $container 變量
$container = New-AzStorageContainer -Name demo -Context $storageAccount.Context
# 將 temp.dat 文件($file)上傳到演示容器($container)
# Blob 名稱(-Blob)將使用您正在上傳的文件的同名(Get-ChildItem $file.Name)
Set-AzStorageBlobContent -File $file.Name -Container $container.Name -Blob (Get-ChildItem $file.Name).Name -Context $storageAccount.Context
Uploading a file to Azure Storage Account

通過 AzCopy 上傳文件

也許您有 更複雜的使用情況,例如在不同帳戶之間同步內容或在規模上複製內容。如果是這樣,則您需要 AzCopy 命令行工具。

運行以下命令以登錄到您的 Azure 租戶,並將您的本地文件($file)複製到容器的 URL 端點。由於 AzCopy 不知道您在 PowerShell 中使用的憑據,因此您正在登錄到 Azure 租戶。

# 登入 Azure 租戶
& .\azcopy.exe login
# 將本地 $file 複製到目標 $container 的完整 URI
& .\azcopy.exe copy $file.Name $container.CloudBlobContainer.Uri.AbsoluteUri
Uploading to Azure Storage Account using AzCopy

如果您想透過 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. 最后,点击上传(蓝色按钮)来上传你的文件。

Using the Upload blob blade in Azure Storage Explorer

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

Viewing contents of a blob container in Azure Storage Explorer

通过 Azure 门户下载文件

与上传内容到 blob 存储一样,Azure 支持多种方式下载内容。但是由于你刚刚通过 Azure 门户上传了一个文件(temp.dat),让我们使用 Azure Storage Explorer 在 Azure 门户中下载同样的文件。

选择要下载的文件(temp.dat),然后点击 Azure Storage Explorer 中的下载按钮,如下图所示。这样做会打开一个新的对话框来确认你要下载的内容,在下一步中你会看到。

Selecting Files to Download

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

Downloading Selected Files from the Blob Storage

通过 PowerShell 下载文件

与上传文件一样,你也可以通过在 PowerShell 中运行命令来从 blob 存储中下载文件。使用 PowerShell,你可以列出容器中的对象,然后下载它们。

运行下面的命令来列出容器中的所有对象,并将temp.dat下载到你的本地目录中。

# 列出 $container 中的所有对象以验证空容器是否已创建
Get-AzStorageBlob -Container $container.Name -Context $storageAccount.Context
# 从 $container 下载 temp.dat 对象
Get-AzStorageBlobContent -Blob temp.dat -Container $container.Name -Context $storageAccount.Context
Downloading files from Azure Storage Account

如果您更喜歡使用短暫的唯一連結來下載文件,您可以使用共享訪問簽名(SAS)令牌來創建預授權的下載連結。這些令牌是獨特且私密的身份驗證令牌,您可以使用它們來驗證您的訪問。

運行以下命令以為您想要下載的文件(temp.dat)創建新的下載連結。生成的下載連結在10秒後過期,並將使用該連結下載(Invoke-WebRequest $uri)內容到$temp變數中。

# 生成一個新的下載連結,有效期為10分鐘
$uri = New-AzStorageBlobSASToken -Context $storageAccount.Context -Container $container.Name -Blob temp.dat -Permission r -ExpiryTime (Get-Date).AddSeconds(10) -FullUri
# 使用連結將文件下載到$temp變數中
$temp = Invoke-WebRequest $uri

# 或者將文件寫入當前目錄
Invoke-WebRequest $uri -OutFile .\temp.dat
Download from Azure Storage Account using a SAS token

在Blob Storage上公開互聯網上的網頁

到目前為止,您已經看到了由已驗證用戶下載文件的用例。但您是否知道Blob Storage也可以為公共內容提供一個優秀的選擇?一個例子是使用Blob來托管您的網頁內容,您將在此演示中實現這一點。

即使您的網頁內容在傳輸和靜態狀態下都被加密,如果設置了公共訪問權限,任何人都可以訪問這些內容。

由于您正在设置一个不同的用例,您将利用公共云在规模和弹性方面的主要优势。您可以为特定的用例配置一个新的存储账户,并限制使用公共容器的风险。

1. 运行下面的命令来创建一个新的存储账户,就像您在“构建Azure环境”部分的第四步中所做的那样。但是这次,您将将返回的对象传递给$publicStorageAccount变量。

$publicStorageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup.ResourceGroupName -Name storage$(Get-Random -Maximum 99999) -Location $resourceGroup.Location -SkuName Standard_LRS
Creating a storage account

现在您有一个专用的存储账户用于您的公共内容,您可以使用以下命令配置它以托管静态网页内容。

2. 接下来,运行Enable-AzStorageStaticWebsite cmdlet来配置存储账户($publicStorageAccount)以适应您的新用例。 -IndexDocument设置要呈现给用户的默认网页。 -Context将是您刚刚创建的新存储账户。

# 创建$web容器并配置存储账户
Enable-AzStorageStaticWebsite -IndexDocument index.html -Context $publicStorageAccount.Context
Enable storage account for website hosting

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

在Web浏览器中访问文档会打印Hello from <storage account name>消息。

# 建立一個簡單的HTML文件
"<body><h1>Hello from $($publicStorageAccount.StorageAccountName)!</h1></body>"|Out-File .\index.html
# 上傳HTML文件到靜態網頁主機容器並設置ContentType為text/html
Set-AzStorageBlobContent -File .\index.html -Container "`$web" -Properties @{ContentType="text/html"} -Context $publicStorageAccount.Context
Create and upload an HTML document

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

$publicStorageAccount.PrimaryEndpoints.Web
Get the URI of the endpoint

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

Accessing HTML Document from Blob Storage

清理資源

現在,您已經通過測試這些在使用Blob存儲方面的新概念,您會希望清理您的資源。為什麼?這樣做可以幫助您保持訂閱的乾淨。更重要的是,您停止產生額外的費用。

由於您在本教程中使用的所有資源都在單個資源組中,您可以通過刪除該資源組來清理所有資源。

資源不總是包含在單個資源組中,這說明在測試或經常迭代時,合理使用邏輯分割是有益的。

執行下面的Remove-AzResourceGroup cmdlet,指定$resourceGroup變量的ResourceGroupName屬性以刪除資源組和其中的所有資源。

Remove-AzResourceGroup -Name $resourceGroup.ResourceGroupName
Delete resource group and contents

結論

在本教程中,您已經學習了如何在不同平台上將文件上傳和下載到雲存儲中的Blob,您還了解了可以從Blob存儲中主機公眾可以訪問的網頁。

您可以通过大量存储和其他存储类型实现更多功能,那么您如何在这些概念基础上构建呢?也许可以使用文件存储账户、提供无服务器文件系统,或者在Azure虚拟机中使用页面 Blob 作为虚拟硬盘?

Source:
https://adamtheautomator.com/blob-storage/