Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Начните работать с модулем клиента Azure Blob Storage для Go для управления BLOB и контейнерами. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.
Справочная документация по | APIИсходный код | библиотекиПакет (pkg.go.dev)
Prerequisites
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Go 1.18+
Настройка
В этом разделе описывается подготовка проекта для работы с клиентским модулем хранилища BLOB-объектов Azure для Go.
Скачивание примера приложения
Пример приложения, используемого в этом кратком руководстве, является базовым приложением Go.
Используйте git , чтобы скачать копию приложения в среду разработки.
git clone https://github.com/Azure-Samples/storage-blobs-go-quickstart
Эта команда клонирует репозиторий в локальную папку Git. Чтобы открыть пример Go для хранилища BLOB-объектов, найдите файл с именем storage-quickstart.go.
Установка пакетов
Чтобы работать с ресурсами BLOB-объектов и контейнеров в учетной записи хранения, установите пакет azblob с помощью следующей команды:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Чтобы пройти проверку подлинности с помощью идентификатора Microsoft Entra (рекомендуется), установите модуль azidentity с помощью следующей команды:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Проверка подлинности в Azure и авторизация доступа к данным BLOB
Запросы приложений к Хранилищу BLOB-объектов Azure должны быть авторизованы. Использование DefaultAzureCredential и клиентской библиотеки удостоверений Azure — это рекомендуемый подход для реализации беспарольных подключений к службам Azure в вашем коде, включая хранилище объектов Blob.
Вы также можете авторизовать запросы к Хранилищу BLOB-объектов Azure с помощью ключа доступа к учетной записи. Однако этот подход следует использовать с осторожностью. Разработчики должны тщательно следить за тем, чтобы не раскрыть ключи доступа в незащищенном расположении. Любой пользователь, имеющий ключ доступа, может авторизовать запросы к учетной записи хранения и эффективно иметь доступ ко всем данным.
DefaultAzureCredential предлагает улучшенные преимущества управления и безопасности по сравнению с ключом учетной записи, чтобы разрешить проверку подлинности без пароля. Оба варианта показаны в следующем примере.
DefaultAzureCredential — это реализация цепочки учетных данных, предоставляемая клиентской библиотекой удостоверений Azure для Go.
DefaultAzureCredential поддерживает несколько методов проверки подлинности и определяет, какой метод следует использовать во время выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.
Дополнительные сведения о порядке и расположениях, в которых DefaultAzureCredential ищет учетные данные, см. в обзоре библиотеки удостоверений Azure.
Например, ваше приложение может пройти аутентификацию, используя ваши учетные данные для входа в Azure CLI, при разработке на локальном компьютере. После развертывания в Azure приложение может использовать управляемое удостоверение. Этот переход между средами не требует каких-либо изменений кода.
Назначение ролей учетной записи пользователя Microsoft Entra
Если вы выполняете разработку локально, убедитесь, что учетная запись пользователя, через которую осуществляется доступ к данным BLOB-объектов, имеет правильные разрешения. Вам потребуется роль Storage Blob Data Contributor для чтения и записи данных BLOB-объектов. Чтобы назначить себе эту роль, вам потребуется, чтобы вам назначили роль администратора доступа пользователей или другую роль, включающую действие Microsoft.Authorization/roleAssignments/write. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о роли участника данных BLOB-объектов хранилища см. в разделе "Участник данных BLOB-объектов хранилища". Дополнительные сведения о доступных областях назначения ролей см. в статье "Общие сведения о области для Azure RBAC".
В этом сценарии вы назначите разрешения для вашей пользовательской учетной записи, ограничив их учетной записью хранения, чтобы обеспечить соблюдение принципа наименьших привилегий. В рамках этой практики пользователям предоставляются только минимальные необходимые разрешения, что позволяет создавать более защищенные рабочие среды.
В следующем примере вашему пользовательскому аккаунту назначается роль Участник данных BLOB-объектов хранилища, предоставляющая доступ как для чтения, так и для записи данных BLOB в вашей учетной записи хранилища.
Important
В большинстве случаев для распространения назначения ролей в Azure потребуется минута или две, но в редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.
На странице обзора учетной записи хранения выберите Контроль доступа (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите +Добавить из верхнего меню и добавьте назначение ролей из результирующего раскрывающегося меню.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите участника данных BLOB-объектов хранилища и выберите соответствующий результат, а затем нажмите кнопку Далее.
В разделе Назначение доступа выберите Пользователь, группа или сервисный принципал, а затем нажмите + Выбрать участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш адрес электронной почты user@domain), а затем выберите Select в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Вход и подключение кода приложения к Azure с помощью DefaultAzureCredential
Чтобы авторизовать доступ к данным в учетной записи хранения, выполните следующие действия:
Убедитесь, что вы прошли проверку подлинности с той же учетной записью Microsoft Entra, которой присвоена роль в вашей учетной записи хранилища. В следующем примере показано, как пройти проверку подлинности с помощью Azure CLI:
az loginЧтобы использовать
DefaultAzureCredentialв приложении Go, установите модуль azidentity с помощью следующей команды:go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Проверка подлинности Azure CLI не рекомендуется для приложений, работающих в Azure. При развертывании в Azure можно использовать тот же код для авторизации запросов в службу хранилища Azure из приложения, работающего в Azure. Однако необходимо включить управляемое удостоверение в приложении в Azure и настроить учетную запись хранения, чтобы разрешить подключение к управляемому удостоверению. Подробные инструкции по настройке этого подключения между службами Azure см. в учебнике по проверке подлинности в приложениях, размещенных в Azure.
Чтобы узнать больше о различных методах проверки подлинности, ознакомьтесь с методами проверки подлинности Azure с помощью Azure SDK для Go.
Запустите пример
В примере кода выполняются следующие действия:
- Создает клиентский объект, авторизованный для доступа к данным с помощью
DefaultAzureCredential - Создание контейнера в учетной записи хранения
- Загружает большой двоичный объект в контейнер
- Перечисление объектов в контейнере
- Загружает BLOB-данные в буфер
- Удаляет ресурсы объектов BLOB и контейнеров, созданные приложением
Перед запуском примера откройте файл storage-quickstart.go . Замените <storage-account-name> именем учетной записи хранения Azure.
Затем запустите приложение с помощью следующей команды:
go run storage-quickstart.go
Выходные данные приложения похожи на следующий пример:
Azure Blob storage quick start sample
Creating a container named quickstart-sample-container
Uploading a blob named sample-blob
Listing the blobs in the container:
sample-blob
Blob contents:
Hello, world! This is a blob.
Press enter key to delete resources and exit the application.
Cleaning up.
Deleting the blob sample-blob
Deleting the container quickstart-sample-container
При нажатии клавиши ВВОД в командной строке пример программы удаляет ресурсы блобов и контейнеров, созданные приложением.
Tip
Вы также можете использовать средство, например обозреватель службы хранилища Azure , для просмотра файлов в хранилище BLOB-объектов. Обозреватель службы хранилища Azure — это бесплатное кроссплатформенное средство, позволяющее получить доступ к сведениям учетной записи хранения.
Разбор примера кода
Далее мы рассмотрим пример кода, чтобы понять, как это работает.
Авторизация доступа и создание клиентского объекта
Работа с любым ресурсом Azure с помощью пакета SDK начинается с создания клиентского объекта. Для создания клиентского объекта пример кода вызывает azblob. NewClient со следующими значениями:
- serviceURL — URL-адрес учетной записи хранения
-
cred — учетные данные Microsoft Entra, полученные с помощью
azidentityмодуля - параметры — параметры клиента; передайте nil, чтобы принять значения по умолчанию
В следующем примере кода создается клиентский объект для взаимодействия с ресурсами контейнера и BLOB-объектов в учетной записи хранения:
// TODO: replace <storage-account-name> with your actual storage account name
url := "https://<storage-account-name>.blob.core.windows.net/"
ctx := context.Background()
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(url, credential, nil)
handleError(err)
Создание контейнера
В примере кода создается новый ресурс контейнера в учетной записи хранения. Если контейнер с тем же именем уже существует, возникает ошибка ResourceExistsError.
Important
Имена контейнеров должны состоять из знаков нижнего регистра. Дополнительные сведения о требованиях к именованию контейнеров и больших двоичных объектов см. в статье "Именование и ссылка на контейнеры", "Большие двоичные объекты" и "Метаданные".
В следующем примере кода создается новый контейнер с именем quickstart-sample-container в учетной записи хранения:
// Create the container
containerName := "quickstart-sample-container"
fmt.Printf("Creating a container named %s\n", containerName)
_, err = client.CreateContainer(ctx, containerName, nil)
handleError(err)
Дополнительные сведения о создании контейнера и изучении дополнительных примеров кода см. в статье "Создание контейнера BLOB-объектов с помощью Go".
Загрузка блобов в контейнер
Пример кода создает массив байтов с некоторыми данными, которые загружаются в виде буфера в новый ресурс Blob в указанном контейнере.
В следующем примере кода данные BLOB-объектов передаются в указанный контейнер с помощью метода UploadBuffer :
data := []byte("\nHello, world! This is a blob.\n")
blobName := "sample-blob"
// Upload to data to blob storage
fmt.Printf("Uploading a blob named %s\n", blobName)
_, err = client.UploadBuffer(ctx, containerName, blobName, data, &azblob.UploadBufferOptions{})
handleError(err)
Дополнительные сведения о отправке больших двоичных объектов и изучении дополнительных примеров кода см. в статье "Отправка большого двоичного объекта с помощью Go".
Перечисление BLOB-объектов в контейнере
В примере кода перечислены блобы в указанном контейнере. В этом примере используется NewListBlobsFlatPager, который возвращает механизм постраничной навигации для BLOB-объектов, начинающийся от указанного маркера. Здесь мы используем пустой маркер для запуска перечисления с самого начала и продолжаем разбиение по страницам, пока не будет больше результатов. Этот метод возвращает имена BLOB-объектов в лексографическом порядке.
В следующем примере кода перечислены блобы (BLOB) в указанном контейнере:
// List the blobs in the container
fmt.Println("Listing the blobs in the container:")
pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
Include: azblob.ListBlobsInclude{Snapshots: true, Versions: true},
})
for pager.More() {
resp, err := pager.NextPage(context.TODO())
handleError(err)
for _, blob := range resp.Segment.BlobItems {
fmt.Println(*blob.Name)
}
}
Дополнительные сведения о перечислении больших двоичных объектов и дополнительные примеры кода см. в разделе "Список больших двоичных объектов" с помощью Go.
Загрузите блоб
Пример кода загружает большой двоичный объект с помощью метода DownloadStream и создает читатель с повторными попытками для чтения данных. Если подключение завершается ошибкой при чтении, средство повторных попыток делает другие запросы, чтобы восстановить подключение и продолжить чтение. Параметры повторного чтения можно указать с помощью структуры RetryReaderOptions.
В следующем примере кода загружается блоб, а его содержимое выводится на консоль.
// Download the blob
get, err := client.DownloadStream(ctx, containerName, blobName, nil)
handleError(err)
downloadedData := bytes.Buffer{}
retryReader := get.NewRetryReader(ctx, &azblob.RetryReaderOptions{})
_, err = downloadedData.ReadFrom(retryReader)
handleError(err)
err = retryReader.Close()
handleError(err)
// Print the contents of the blob we created
fmt.Println("Blob contents:")
fmt.Println(downloadedData.String())
Дополнительные сведения о скачивании больших двоичных объектов и дополнительные примеры кода см. в статье "Скачать большой двоичный объект с помощью Go".
Очистите ресурсы
Если вам больше не нужны блобы, загруженные в этом кратком руководстве, можно удалить отдельный блоб с помощью метода DeleteBlob или удалить весь контейнер вместе с его содержимым с помощью метода DeleteContainer.
// Delete the blob
fmt.Printf("Deleting the blob " + blobName + "\n")
_, err = client.DeleteBlob(ctx, containerName, blobName, nil)
handleError(err)
// Delete the container
fmt.Printf("Deleting the container " + containerName + "\n")
_, err = client.DeleteContainer(ctx, containerName, nil)
handleError(err)
Дополнительные сведения об удалении больших двоичных объектов и контейнеров и изучении дополнительных примеров кода см. в статье "Удаление большого двоичного объекта с помощью Go " и "Удаление контейнера" с помощью Go.