Как использовать хранилище BLOB через файловое хранилище Azure

Вы можете оказаться в ситуации, когда вам понадобится дешевое, но эффективное решение для хранения ваших файлов. Но где найти такое решение? Обратите внимание на хранилище двоичных больших объектов (blob) от Microsoft Azure! Blob-хранилище является одним из сервисов хранения Azure, которое позволяет вам хранить большие объемы текстовых и бинарных файлов, потоковое содержимое или даже статическое содержимое для распределения.

В этом руководстве вы узнаете, как работать с blob-хранилищем в Azure, следуя нескольким распространенным примерам.

Читайте далее, чтобы начать!

Предварительные требования

Этот учебник будет демонстрацией на практике. Если вы хотите следовать за ним, убедитесь, что у вас установлены и доступны следующие компоненты.

Создание среды Azure

Прежде чем использовать хранилище блобов для хранения ваших файлов, вам сначала нужно импортировать модули PowerShell Core, подключиться к вашей подписке Azure и создать среду Azure.

1. Запустите PowerShell 7 и выполните следующую команду, чтобы импортировать модули, которые вы будете использовать для хранения файлов в хранилище блобов.

Importing the necessary modules
# Az.Accounts - Предоставляет командлеты управления учетными данными
# Az.Resources - Предоставляет командлеты для работы с основными поставщиками ресурсов Azure,
               # такими как подписки
# Az.Storage - Предоставляет командлеты, которые помогут вам работать с различными хранилищами,
             # такими как блобы
Import-Module Az.Accounts, Az.Resources, Az.Storage

2. Затем войдите в свою тенант Azure Active Directory (AD), а затем выполните нижеприведенную команду, чтобы завершить интерактивную аутентификацию в вашем веб-браузере, как показано ниже.

Хотя это выходит за рамки данного руководства, существуют и другие методы аутентификации, такие как Сервисный Принципал или использование токена доступа.

Connect-AzAccount
Azure Portal interactive login.

Всегда убедитесь, что арендатор и подписка, отображаемые после входа, соответствуют тем, которые вы намерены использовать. При необходимости вы можете изменить свой контекст.

3. Теперь выполните нижеприведенную команду, чтобы создать новую группу ресурсов с именем demo, и добавьте к нему пять случайных чисел (Get-Random -Maximum 99999). Группы ресурсов иерархически находятся ниже подписок и содержат ресурсы, которые позволяют более детальное управление.

Обратите внимание, что -Местоположение группы ресурсов установлено на 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, что и свойство Location переменной $resourceGroup.
# Размещение ресурсов в том же регионе, что и родительская группа ресурсов, является хорошей практикой. 
# Укажите имя учетной записи хранения -SkuName с 
# хранением с локальной избыточностью (LRS) или глобально уникальным именем в Azure.

$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 использует учетную запись, под которой вы в настоящее время вошли через свойство UserID, возвращаемое командой Get-AzAccessToken.
  • Значение -RoleDefinitionName является встроенной ролью Участник данных блобов хранилища, которую вы назначаете.
  • Значение -Scope устанавливает область назначения роли для созданного вами хранилища (показано storage10029) через свойство Id переменной $storageAccount.

Вы всегда можете указать более детальные назначения ролей для отдельных контейнеров по мере необходимости.

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

6. Наконец, выполните серию команд ниже, чтобы создать файл с именем temp.dat на вашей локальной системе. Вы будете загружать и загружать этот файл из хранилища в следующих разделах, чтобы продемонстрировать, как работает хранилище блобов.

# Загрузить класс 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 и создали образец файла, давайте начнем загрузку файла в хранилище блобов. Хранилище блобов работает по-разному, чем стандартные файловые системы. Каждый файл в хранилище блобов представляет собой объект и хранится в контейнерах.

Основные функции блобов схожи с другими файловыми системами, но существуют случаи использования, когда одно из них может быть лучшим решением. Блобы могут даже поддерживать виртуальные файловые системы (например, BlobFuse).

Microsoft предлагает несколько методов для загрузки файлов в учетные записи хранилища с помощью PowerShell, AzCopy и портала Azure. Но давайте загрузим образец файла (temp.dat) в хранилище блобов с помощью PowerShell для начала. PowerShell предоставляет вам последовательный опыт работы с учетными записями хранилища Azure.

Для выполнения этой демонстрации требуется выполнить определенные действия, которые повлекут за собой расходы. Следите за своим потреблением и удаляйте ресурсы, когда вы больше не собираетесь их использовать.

Запустите следующие команды для создания нового контейнера и загрузки файла temp.dat ($file) в качестве объекта. В этом примере контейнер назван demo, но вы можете дать ему другое имя, как вам удобно.

# Создает контейнер в $storageAccount через свойство Context хранилища учетных записей хранилища
# Возвращенный объект затем передается переменной $container
$container = New-AzStorageContainer -Name demo -Context $storageAccount.Context
# Загружает файл temp.dat ($file) в контейнер demo ($container)
# Имя блоба (-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-адрес контейнера. Вы входите в учетную запись Azure, так как AzCopy не знает учетных данных, которые вы используете с PowerShell.

# Войти в арендатор Azure
& .\azcopy.exe login
# Скопировать локальный $файл на полный 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

Если вы предпочитаете графический метод загрузки ваших файлов, то Проводник хранилища Azure – ваш друг. Проводник хранилища Azure – один из лучших графических методов управления вашим хранилищем блобов. Вы можете получить доступ к проводнику хранилища из ресурса вашего хранилища в портале Azure.

1. Откройте ваш любимый веб-браузер и перейдите в Проводник хранилища в портале Azure.

2. Щелкните на контейнере demo в разделе КОНТЕЙНЕРЫ БЛОБОВ, как показано ниже, затем щелкните Загрузить, чтобы получить доступ к лезвию Загрузить блоб (правая панель).

3. Теперь щелкните по значку папки на панели Загрузить блоб, чтобы выбрать файлы для загрузки (temp.dat).

4. Наконец, нажмите Загрузить (синяя кнопка), чтобы загрузить свой файл.

Using the Upload blob blade in Azure Storage Explorer

После завершения загрузки вы можете закрыть панель Загрузить блоб и увидеть загруженный вами блоб, как на изображении ниже.

Viewing contents of a blob container in Azure Storage Explorer

Загрузка файлов через портал Azure

Подобно загрузке контента в хранилище блобов, Azure поддерживает загрузку контента различными способами. Но поскольку вы только что загрузили файл (temp.dat) через портал Azure, давайте загрузим тот же файл, используя Проводник хранилища Azure в портале Azure.

Выберите файл (temp.dat) для загрузки и нажмите кнопку Загрузить в Проводнике хранилища Azure, как показано ниже. Это откроет новое диалоговое окно для подтверждения загрузки, которое вы увидите на следующем шаге.

Selecting Files to Download

Теперь нажмите кнопку Нажмите здесь, чтобы начать загрузку, чтобы загрузить выбранные вами файлы.

Downloading Selected Files from the Blob Storage

Загрузка файлов через PowerShell

Как и при загрузке файлов, у вас также есть возможность загрузить файлы из хранилища блобов, выполнив команды в PowerShell. С помощью PowerShell вы можете перечислить объекты в контейнере, а затем загрузить их.

Выполните нижеприведенные команды, чтобы перечислить все объекты в вашем контейнере и загрузить temp.dat в ваш локальный каталог.

# Перечислить все объекты в $container для проверки создания пустого контейнера
Get-AzStorageBlob -Container $container.Name -Context $storageAccount.Context
# Загрузить объект temp.dat из $container
Get-AzStorageBlobContent -Blob temp.dat -Container $container.Name -Context $storageAccount.Context
Downloading files from Azure Storage Account

Если вы предпочитаете использовать ссылки с коротким сроком действия для загрузки файлов, вы можете использовать токены Shared Access Signature (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

Размещение веб-страницы в общедоступном интернете из хранилища блобов

До этого момента вы видели примеры загрузки файлов аутентифицированными пользователями. Но знали ли вы, что хранилище блобов также может предоставить отличную опцию для публичного контента? Одним из примеров является использование блоба для размещения содержимого вашей веб-страницы, что вы и сделаете в этом примере.

Даже если содержимое вашей веб-страницы зашифровано как во время передачи, так и в покое, любой может получить доступ к этому содержимому, если установлен общедоступный доступ.

Поскольку вы настраиваете другой сценарий использования, вы будете использовать одно из основных преимуществ общедоступного облака – масштабирование и эластичность. Вы можете создать новый учетную запись хранилища для определенного случая использования и ограничить риск использования общедоступных контейнеров.

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 для настройки учетной записи хранилища ($publicStorageAccount) для вашего нового случая использования. Параметр -IndexDocument устанавливает страницу веб-сайта по умолчанию, которую вы хотите предоставить пользователям. Параметр -Context будет новой учетной записью хранилища, которую вы только что создали.

# Создать контейнер $web и настроить учетную запись хранилища
Enable-AzStorageStaticWebsite -IndexDocument index.html -Context $publicStorageAccount.Context
Enable storage account for website hosting

3. Выполните следующие команды для создания нового HTML-документа в вашем текущем каталоге и загрузите этот документ в контейнер, специально предназначенный для размещения веб-контента. Тип содержимого установлен на HTML (ContentType="text/html"), чтобы веб-браузеры могли правильно интерпретировать документ.

Доступ к документу в веб-браузере выводит сообщение Hello from <имя учетной записи хранилища>.

# Создайте простой 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

Очистка ресурсов

Теперь, когда вы прошли тестирование этих новых концепций использования хранилища блобов, вам захочется очистить ваши ресурсы. Зачем? Это поможет вам поддерживать чистоту вашей подписки. Более того, вы прекратите понесение дополнительных расходов.

Поскольку все ресурсы, которые вы использовали в этом руководстве, находятся в одной группе ресурсов, вы можете очистить все ресурсы, удалив группу ресурсов.

Ресурсы не всегда будут находиться в одной группе ресурсов, что показывает, почему широкое использование логического сегментирования может быть полезным, особенно при частом тестировании или итерации.

Выполните командлет Remove-AzResourceGroup ниже, указав свойство ResourceGroupName переменной $resourceGroup, чтобы удалить группу ресурсов и все ресурсы внутри.

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

Заключение

В этом руководстве вы коснулись загрузки и скачивания файлов в и из блобов в облачном хранилище на разных платформах. Вы также узнали, что возможно размещать веб-страницу из блобов, к которой пользователи могут обращаться публично.

Можно сделать гораздо больше с хранилищем блобов и другими типами хранилищ, так как можно развивать эти концепции? Возможно, работать с учетными записями файлового хранилища, предоставлять безсерверные файловые системы или использовать блобы страниц для виртуальных жестких дисков с виртуальными машинами Azure?

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