Упражнение. Управление многоуровневым хранилищем с помощью приложений ASP.NET Core
Теперь вы протестируете пример кода .NET, который получает и изменяет уровни хранилища для ряда больших двоичных объектов в службе хранилища Azure. Вы создадите новую учетную запись BLOBStorage и задайте для нее значение Cool. Затем вы отправите некоторые данные и используйте приложение для изменения уровней хранилища.
Скачивание кода и примера данных
Сначала нужно скачать исходный код и пример данных в хранилище Cloud Shell.
Выполните следующие команды в Cloud Shell, чтобы скачать исходный код и примеры данных в папку
storageapp
в хранилище Cloud Shell:git clone https://github.com/MicrosoftDocs/mslearn-optimize-blob-storage-costs storageapp cd storageapp
Создание учетной записи хранилища BLOB-объектов с помощью CLI
Теперь вы создадите новую учетную запись BLOBStorage и получите ключ хранения учетной записи.
Выполните следующие команды в Cloud Shell, чтобы создать новую учетную запись BLOBStorage, установленную как Cool. Замените
<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`
Создание контейнера и отправка данных
В этом шаге вы создадите контейнер и три больших двоичных объекта с примером данных в каждом.
В Cloud Shell выполните приведенную ниже команду, чтобы создать контейнер.
az storage container create \ --name blobcontainer \ --account-name $AZURE_STORAGE_ACCOUNT \ --account-key $AZURE_STORAGE_KEY
В Cloud Shell выполните приведенные ниже команды, чтобы создать большие двоичные объекты с примерами данных.
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
Задание уровня для каждого большого двоичного объекта
В этом шаге вы зададите уровень доступа для каждого большого двоичного объекта.
В 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. Затем он изменяет уровень хранилища всех трех больших двоичных объектов и запрашивает уровень хранилища каждого большого двоичного объекта еще раз, чтобы проверить изменение. Уровень архива не изменится из-за задержки восстановления.
Просмотр кода приложения
На заключительном этапе вы просмотрите код, используемый приложением ManageStorageTiers для управления уровнями доступа и их изменения.
В Cloud Shell введите
code .
, а затем используйте редактор, чтобы открыть ManageStorageTiers\Program.cs.Этот код отображает уровни хранилища для всех больших двоичных объектов в контейнере:
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}"); } }
Следующие методы работают вместе для обновления уровня хранилища для набора больших двоичных объектов в контейнере:
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; }