Управление контейнерами BLOB-объектов с помощью Azure
В Хранилище BLOB-объектов Microsoft Azure могут быть размещены большие объемы неструктурированных данных объектов. С помощью Хранилища BLOB-объектов можно собирать данные мультимедиа, содержимое и данные приложений и предоставлять все эти данные пользователям. Так как все данные BLOB-объектов хранятся в контейнерах, перед началом отправки данных необходимо создать контейнер хранилища. Дополнительные сведения о Хранилище BLOB-объектов см. в статье Общие сведения о хранилище BLOB-объектов Azure.
Azure CLI — это кроссплатформенный интерфейс командной строки в Azure для управления ресурсами Azure. Вы можете использовать его в браузере с Azure Cloud Shell. Его также можно установить в macOS, Linux или Windows и запускать локально из командной строки.
В этой статье описывается, как использовать Azure CLI с Bash для работы с объектами контейнеров.
Необходимые компоненты
Для доступа к службе хранилища Azure требуется подписка Azure. Если у вас еще нет подписки, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Доступ к хранилищу Azure осуществляется с помощью учетной записи хранения. Для работы с этим руководством создайте учетную запись хранения с помощью портала Azure, Azure PowerShell или Azure CLI. Инструкции по созданию учетной записи хранения см. в статье Создайте учетную запись хранения.
Подготовка среды к работе с Azure CLI
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Оптимально, если у вас установлена последняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
Авторизация доступа к хранилищу BLOB-объектов
Вы можете авторизовать доступ к хранилищу BLOB-объектов из Azure CLI с помощью учетных данных Microsoft Entra или с помощью ключа доступа к учетной записи хранения. Использование учетных данных Microsoft Entra рекомендуется, и в примерах этой статьи используется исключительно идентификатор Microsoft Entra ID.
Команды Azure CLI для операций с данными в хранилище BLOB-объектов поддерживают параметр --auth-mode
, что позволяет указать, как авторизовать определенную операцию. --auth-mode
Задайте параметр для login
авторизации с помощью учетных данных Microsoft Entra. Дополнительные сведения см. в статье Авторизация доступа к данным BLOB-объектов или очередей с помощью Azure CLI.
Выполните команду login
, чтобы открыть браузер и подключиться к своей подписке Azure.
az login
Создание контейнера
Чтобы создать контейнер с помощью Azure CLI, выполните команду az storage container create. В следующем примере приведены три варианта для создания контейнеров BLOB-объектов с помощью команды az storage container create
. В первом варианте создается один контейнер, а двух других создание контейнера автоматизируется с помощью операций скриптов Bash.
Для этого примера нужно указать значения переменных и выполнить вход в систему. Не забудьте заменить значения заполнителей в скобках собственными значениями.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"
# Approach 1: Create a container
az storage container create \
--name $containerName \
--account-name $storageAccount \
--auth-mode login
# Approach 2: Create containers with a loop
for value in {2..5}
do
az storage container create \
--name $containerPrefix$value \
--account-name $storageAccount \
--auth-mode login
done
# Approach 3: Create containers by splitting multiple values
containerList="${containerPrefix}6 ${containerPrefix}7 ${containerPrefix}8"
for container in $containerList
do
az storage container create \
--name $container \
--account-name $storageAccount \
--auth-mode login
done
Перечисление контейнеров
Используйте команду az storage container list
, чтобы получить список контейнеров хранилища. Чтобы получить список контейнеров, имена которых начинаются с определенной строки символов, передайте строку в виде значения параметра --prefix
.
Параметр --num-results
позволяет ограничить число контейнеров, возвращаемых запросом. Служба хранилища Azure ограничивает число контейнеров, возвращаемых одной операцией вывода, значением в 5000. Это ограничение гарантирует, что будет возвращен удобный для обработки объем данных. Если число возвращенных контейнеров превышает значение --num-results
или предел обслуживания, возвращается маркер продолжения. Этот маркер позволяет использовать несколько запросов для извлечения любого числа контейнеров.
Вы также можете использовать параметр --query
для выполнения запроса аутентификации JMESPath для результатов команды. JMESPath — это язык запросов для JSON, позволяющий выбрать и изменить данные, возвращаемые CLI. Запросы к выходным данным JSON выполняются до того, как они будут отформатированы. Дополнительные сведения см. в статье Запрос выходных данных команды Azure CLI с помощью запроса JMESPath.
В следующем примере сначала приводится максимальное число контейнеров (зависит от ограничения службы). Далее он выводит три контейнера, имена которых начинаются с префикса container-, указывая значения для параметров --num-results
и --prefix
. Наконец, выводится отдельный контейнер путем указания известного имени контейнера в параметре --prefix
.
См. дополнительные сведения о команде az storage container list.
#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"
numResults="3"
# Approach 1: List maximum containers
az storage container list \
--account-name $storageAccount \
--auth-mode login
# Approach 2: List a defined number of named containers
az storage container list \
--prefix $containerPrefix \
--num-results $numResults \
--account-name $storageAccount \
--auth-mode login
# Approach 3: List an individual container
az storage container list \
--prefix $containerPrefix \
--query "[?name=='$containerName']" \
--account-name $storageAccount \
--auth-mode login
Чтение свойств и метаданных контейнера
Контейнер содержит как системные свойства, так и пользовательские метаданные. Системные свойства есть у каждого ресурса Хранилища BLOB-объектов. Некоторые свойства доступны только для чтения, а другие можно прочитать и записать. На самом деле, некоторые системные свойства соответствуют определенным стандартным заголовкам HTTP.
Определяемые пользователем метаданные состоят из одной или нескольких пар "имя-значение", которые можно указать для ресурса Хранилища BLOB-объектов. Вы можете использовать метаданные для хранения дополнительных значений с помощью ресурса хранилища. Значения метаданных предназначены только для ваших собственных целей и не влияют на поведение ресурса.
Свойства контейнера
Чтобы отобразить свойства контейнера с помощью Azure CLI, выполните команду az storage container show.
В следующем примере первый вариант отображает свойства отдельного именованного контейнера. Затем он получает все контейнеры с префиксом demo-container- и выполняет перебор контейнеров с получением их свойств. Не забудьте заменить значения заполнителей собственными значениями.
#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"
# Show a named container's properties
az storage container show \
--name $containerName \
--account-name $storageAccount \
--auth-mode login
# List several containers and show their properties
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--account-name $storageAccount \
--auth-mode login \
--output tsv)
for row in $containerList
do
tmpRow=$(echo $row | sed -e 's/\r//g')
az storage container show --name $tmpRow --account-name $storageAccount --auth-mode login
done
Чтение и запись метаданных контейнера
Пользователи, в учетных записях хранения которых содержится несколько тысяч объектов, могут быстро найти нужные контейнеры по их метаданным. Чтобы считать метаданные, используйте команду az storage container metadata show
. Чтобы обновить метаданные, необходимо выполнить команду az storage container metadata update
. Этот метод применяет только разделенные пробелами пары "ключ-значение". Дополнительные сведения см. в документации по az storage container metadata.
В первом примере ниже выполняется обновление и получение метаданных именованного контейнера. Во втором примере выполняется итерация списка контейнеров, соответствующих значению -prefix
. Контейнеры с именами, содержащими четные числа, включают метаданные, заданные с помощью значений в переменной metadata.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"
# Create metadata string
metadata="key=value pie=delicious"
# Update named container metadata
az storage container metadata update \
--name $containerName \
--metadata $metadata \
--account-name $storageAccount \
--auth-mode login
# Display metadata
az storage container metadata show \
--name $containerName \
--account-name $storageAccount \
--auth-mode login
# Get list of containers
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--account-name $storageAccount \
--auth-mode login \
--output tsv)
# Update and display metadata
for row in $containerList
do
#Get the container's number
tmpName=$(echo $row | sed -e 's/\r//g')
if [ `expr ${tmpName: ${#containerPrefix}} % 2` == 0 ]
then
az storage container metadata update \
--name $tmpName \
--metadata $metadata \
--account-name $storageAccount \
--auth-mode login
echo $tmpName
az storage container metadata show \
--name $tmpName \
--account-name $storageAccount \
--auth-mode login
fi
done
Удаление контейнеров
В зависимости от вашего варианта использования вы можете удалить отдельный контейнер или группу контейнеров с помощью команды az storage container delete
. При удалении списка контейнеров вам потребуется использовать условные операции, как показано в примере ниже.
Предупреждение
Выполнение приведенных ниже примеров может привести к необратимому удалению контейнеров и BLOB-объектов. Мы рекомендуем включить обратимое удаление для контейнеров, чтобы защитить их и BLOB-объекты от случайного удаления. Дополнительные сведения см. в статье Обратимое удаление для контейнеров.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"
# Delete a single named container
az storage container delete \
--name $containerName \
--account-name $storageAccount \
--auth-mode login
# Delete containers by iterating a loop
list=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--account-name $storageAccount \
--auth-mode login \
--output tsv)
for row in $list
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName \
--account-name $storageAccount \
--auth-mode login
done
Если для вашей учетной записи хранения включено обратимое удаление контейнеров, вы сможете получить удаленные контейнеры. Если в вашей учетной записи хранения включена защита данных с помощью обратимого удаления, то при указании параметра --include-deleted
будут возвращены контейнеры, удаленные в течение связанного периода хранения. Параметр --include-deleted
можно использовать для получения контейнеров только при использовании с параметром --prefix
. Дополнительные сведения об обратимом удалении см. в статье Обратимое удаление для контейнеров.
Используйте следующий пример, чтобы получить список контейнеров, удаленных в течение связанного периода хранения для учетной записи хранения.
#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
# Retrieve a list of containers including those recently deleted
az storage container list \
--prefix $containerPrefix \
--include-deleted \
--account-name $storageAccount\
--auth-mode login
Восстановление обратимо удаленного контейнера
Как уже упоминалось в разделе Перечисление контейнеров, вы можете настроить защиту данных с помощью обратимого удаления в учетной записи хранения. Если такая защита данных включена, то вы сможете восстановить контейнеры, удаленные в течение связанного периода хранения. Прежде чем использовать этот пример, необходимо включить обратимое удаление и настроить его по крайней мере в одной из ваших учетных записей хранения.
В следующих примерах объясняется, как восстановить контейнер, к которому было применено обратимое удаление, с помощью команды az storage container restore
. Вам потребуется указать значения для параметров --name
и --version
, чтобы гарантировать восстановление нужной версии контейнера. Если вы не знаете номер версии, вы можете использовать команду az storage container list
, чтобы получить его, как показано в первом примере. Во втором примере выполняется поиск и восстановление всех удаленных контейнеров в конкретной учетной записи хранения.
Дополнительные сведения о защите данных с помощью обратимого удаления см. в статье Обратимое удаление для контейнеров.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
# Restore an individual named container
containerVersion=$(az storage container list \
--account-name $storageAccount \
--query "[?name=='$containerName'].[version]" \
--auth-mode login \
--output tsv \
--include-deleted | sed -e 's/\r//g')
az storage container restore \
--name $containerName \
--deleted-version $containerVersion \
--account-name $storageAccount \
--auth-mode login
# Restore a list of deleted containers
containerList=$(az storage container list \
--account-name $storageAccount \
--include-deleted \
--auth-mode login \
--query "[?deleted].{name:name,version:version}" \
-o json)
for row in $(echo "${containerList}" | jq -c '.[]' )
do
tmpName=$(echo $row | jq -r '.name')
tmpVersion=$(echo $row | jq -r '.version')
az storage container restore \
--account-name $storageAccount \
--name $tmpName \
--deleted-version $tmpVersion \
--auth-mode login
done
Получение подписанного URL-адреса для контейнера
Подписанный URL-адрес (SAS) предоставляет делегированный доступ к ресурсам Azure. Благодаря SAS вы получаете детальный контроль над тем, как клиент может обращаться к вашим данным. Например, вы можете указать, какие ресурсы будут доступны клиенту. Вы также можете ограничить типы операций, выполняемых клиентом, и указать интервал для срока действия подписанного URL-адреса.
SAS обычно используется для предоставления временного и безопасного доступа клиенту, у которого нет разрешений. Чтобы создать подписанный URL-адрес службы или учетной записи, вам нужно указать значения для параметров --account-name
и --account-key
. Примером такого сценария может быть служба, которая позволяет пользователям считывать свои данные из вашей учетной записи хранения и записывать данные в эту учетную запись.
Служба хранилища Azure поддерживает три типа подписанных URL-адресов: SAS делегирования пользователя, SAS службы и SAS учетной записи. Дополнительные сведения о подписанных URL-адресах см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Внимание
Любой клиент, обладающий действительным SAS, может получить доступ к данным в вашей учетной записи хранения в соответствии с тем, как это допускается этим SAS. Важно обеспечить для SAS защиту от вредоносного или непреднамеренного использования. Распространять SAS нужно с осторожность и следует подготовить план для отзыва скомпрометированного SAS.
В следующем примере показано, как настроить подписанный URL-адрес службы для определенного контейнера с помощью команды az storage container generate-sas
. Так как она создает подписанный URL-адрес службы, пример сначала получает ключ учетной записи хранения для передачи в виде значения --account-key
.
В этом примере для SAS будут заданы время начала и окончания срока действия, а также протокол. Также будут заданы разрешения на удаление, чтение, запись и вывод в подписанном URL-адресе с помощью параметра --permissions
. Полный список разрешений можно найти в статье Создание SAS службы.
Скопируйте и вставьте значение маркера SAS BLOB-объекта в защищенное расположение. Он будет отображен только один раз, поэтому вы не сможете получить его после закрытия Bash. Чтобы создать URL-адрес SAS, добавьте маркер SAS (URI) к URL-адресу службы хранилища.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
permissions="drwl"
expiry=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`
accountKey=$(az storage account keys list \
--account-name $storageAccount \
--query "[?permissions == 'FULL'].[value]" \
--output tsv)
accountKey=$( echo $accountKey | cut -d' ' -f1 )
az storage container generate-sas \
--name $containerName \
--https-only \
--permissions dlrw \
--expiry $expiry \
--account-key $accountKey \
--account-name $storageAccount
Примечание.
Маркер SAS, возвращаемый Azure CLI, не включает символ разделителя ('?') для строки запроса URL-адреса. Если маркер SAS добавляется к URL-адресу ресурса, не забудьте добавить символ разделителя в URL-адрес ресурса перед добавлением маркера SAS.
Следующие шаги
Из этой статьи вы узнали, как управлять контейнерами в хранилище BLOB-объектов. Для получения дополнительных сведений о работе с хранилищем BLOB-объектов с помощью Azure CLI выберите один из разделов ниже.