Поделиться через


Управление BLOB-контейнерами с помощью Azure CLI

Хранилище 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 или Queue с помощью 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.

#!/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 .

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

#!/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 помощью команды. При удалении списка контейнеров необходимо использовать условные операции, как показано в приведенных ниже примерах.

Предупреждение

При запуске следующих примеров контейнеры и блобы могут быть окончательно удалены. Компания Microsoft рекомендует включить мягкое удаление для контейнера, чтобы защитить его и 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-адреса для контейнера

Подпись общего доступа (SAS) предоставляет делегированный доступ к ресурсам Azure. SAS предоставляет подробный контроль над доступом клиента к вашим данным. Например, можно указать, какие ресурсы доступны клиенту. Можно также ограничить типы операций, которые может выполнять клиент, и указать интервал, в течение которого sas является допустимым.

SAS обычно используется для предоставления временного и безопасного доступа к клиенту, у которого обычно нет разрешений. Чтобы создать SAS службы или учетной записи, необходимо указать значения для --account-name и --account-key параметров. Примером этого сценария будет служба, которая позволяет пользователям читать и записывать собственные данные в учетную запись хранения.

Служба хранилища Azure поддерживает три типа подписей для совместного доступа: подписи делегирования пользователей, служебные подписи и подписи учетной записи SAS. Дополнительные сведения о подписанных URL-адресах см. в статье "Предоставление ограниченного доступа к ресурсам службы хранилища Azure" с помощью подписанных URL-адресов .

Осторожность

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

В следующем примере показано, как настроить SAS службы для определенного контейнера с помощью az storage container generate-sas команды. Так как он создает SAS службы, в примере сначала извлекается ключ учетной записи хранения для передачи в качестве --account-key значения.

В примере будет настроен SAS с временем начала и истечения срока действия и протокола. Он также укажет разрешения на удаление, чтение, запись и список в SAS с помощью --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 Storage. Чтобы узнать больше о работе с хранилищем BLOB-объектов с помощью Azure CLI, выберите следующий вариант.