演练 - 使用 ASP.NET Core 应用管理分层存储
你现在将测试一些示例 .NET 代码,检索和修改某些示例 Azure 存储 blob 的层级别。 你将创建新的 BlobStorage 帐户,并将帐户设置为“冷”。 然后上传一些数据,使用应用修改存储层。
下载代码和示例数据
在此第一步中,将源代码和示例数据下载到 Cloud Shell 存储。
在 Cloud Shell 中运行以下命令,将源代码和示例数据下载到 Cloud Shell 存储中的
storageapp
文件夹:git clone https://github.com/MicrosoftDocs/mslearn-optimize-blob-storage-costs storageapp cd storageapp
使用 CLI 新建 Blob 存储帐户
现在将新建 BlobStorage 帐户,并检索帐户存储密钥。
在 Cloud Shell 中运行以下命令,新建访问层设置为“冷”的 BlobStorage 帐户。 将以下代码中的
<random string>
替换为字母或数字字符串:export RESOURCE_GROUP=<rgn>[sandbox resource group name]</rgn> export AZURE_STORAGE_ACCOUNT=<random string>storageaccount az storage account create \ --resource-group $RESOURCE_GROUP \ --name $AZURE_STORAGE_ACCOUNT \ --kind BlobStorage \ --access-tier Cool
在 Cloud Shell 中运行以下命令,检索帐户存储密钥,并将其存储在变量中:
export AZURE_STORAGE_KEY=`az storage account keys list -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --query [0].value --output tsv`
创建容器和上传数据
在本步骤中,你将创建一个 blob 容器和三个 blob,每个都包含一些示例数据。
在 Cloud Shell 中运行以下命令,新建容器:
az storage container create \ --name blobcontainer \ --account-name $AZURE_STORAGE_ACCOUNT \ --account-key $AZURE_STORAGE_KEY
在 Cloud Shell 中使用示例数据对 blob 运行以下命令:
cd ManageStorageTiers az storage blob upload --file testdata.txt --container-name blobcontainer --name blob1 az storage blob upload --file testdata.txt --container-name blobcontainer --name blob2 az storage blob upload --file testdata.txt --container-name blobcontainer --name blob3
设置每个 blob 的层
在本步骤中,你将设置每个 blob 的访问层。
在 Cloud Shell 中运行以下命令,将 blob1 设置为“存档”:
az storage blob set-tier \ --container-name blobcontainer \ --name blob1 \ --tier Archive
在 Cloud Shell 中运行以下命令,将 blob2 设置为“冷”:
az storage blob set-tier \ --container-name blobcontainer \ --name blob2 \ --tier Cool
在 Cloud Shell 中运行以下命令,将 blob3 设置为“热”:
az storage blob set-tier \ --container-name blobcontainer \ --name blob3 \ --tier Hot
使用代码管理存储层
现在可以部署和测试一些代码。 首先,设置示例应用所需的环境变量。 然后构建并运行示例应用(忽略关于 Microsoft.Azure.KeyVault.Core 的警告)。
在 Cloud Shell 中运行以下命令,存储应用所用的环境变量:
export STORAGE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --output tsv` export CONTAINER_NAME=blobcontainer
在 Cloud Shell 中运行以下命令,构建和运行 ManageStorageTiers 应用:
cd ManageStorageTiers dotnet build dotnet run
ManageStorageTiers 应用现在连接到 blob 存储,并查询名为 blob1、blob2 和 blob3 的三个 blob。 然后,它会更改所有三个 blob 的存储层,并再次查询每个 blob 的存储层以验证更改。 由于解除冻结延迟,“存档”层将不会更改。
查看应用代码
在此最后一步中,查看 ManageStorageTiers 应用用于管理和更改访问层的代码。
在 Cloud Shell 中,输入
code .
,然后使用编辑器打开 ManageStorageTiers\Program.cs。此代码显示容器中所有 Blob 的存储层:
private static async Task DisplayBlobTiers(BlobContainerClient blobContainerClient) { AsyncPageable<BlobItem> blobItems = blobContainerClient.GetBlobsAsync(); await foreach (var blobItem in blobItems) { Console.WriteLine($" Blob name {blobItem.Name}: Tier {blobItem.Properties.AccessTier}"); } }
以下方法协同工作,更新容器中一组 Blob 的存储层:
private static async Task UpdateBlobTiers(BlobContainerClient blobContainerClient) { AsyncPageable<BlobItem> blobItems = blobContainerClient.GetBlobsAsync(); await foreach (var blobItem in blobItems) { string blobName = blobItem.Name; AccessTier? currentAccessTier = blobItem.Properties.AccessTier; AccessTier newAccessTier = GetNewAccessTier(currentAccessTier); Console.WriteLine($" Blob name: {blobItem.Name} Current tier: {currentAccessTier} New tier: {newAccessTier}"); BlobClient blobClient = blobContainerClient.GetBlobClient(blobItem.Name); blobClient.SetAccessTier(newAccessTier); } } private static AccessTier GetNewAccessTier(AccessTier? accessTier) { if (accessTier == AccessTier.Hot) return AccessTier.Cool; else if (accessTier == AccessTier.Cool) return AccessTier.Archive; else return AccessTier.Hot; }