Используйте Azure SDK для Go для взаимодействия с данными

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

Что такое плоскость данных Azure?

Плоскость данных Azure — это набор API- интерфейсов, используемых для взаимодействия с данными в службах Azure, включая отправку больших двоичных объектов, отправку сообщений, запрос баз данных и получение секретов. Хотя плоскость управления подготавливает и настраивает ресурсы, плоскость данных — это то, что вызывает код приложения во время выполнения. Общий рабочий процесс в Go заключается в том, чтобы использовать код control plane один раз для настройки или автоматизации, а затем оставлять клиентов data plane на пути приложения, который запускается ежедневно.

Azure SDK для Go предоставляет плоскость данных через пакеты, относящиеся к службе, такие как azblob, azservicebus, azeventhubs, azsecrets и azcosmos. Каждый пакет подключается к уже подготовленному ресурсу и соответствует согласованному шаблону:

  1. Проверка подлинности с помощью azidentity пакета.
  2. Создайте типизированного клиента, используя конечную точку службы или строку подключения.
  3. Вызов методов на клиенте для чтения, записи или обработки данных.
  4. Обработка результатов и ошибок с разбивкой на страницы.

Ниже приведены распространенные сценарии для операций плоскости данных Go:

  • Отправка и скачивание файлов из Хранилище BLOB-объектов
  • Отправка и получение сообщений с помощью служебная шина или Центров событий
  • Хранение и запрос документов в Cosmos DB
  • Получение секретов, ключей и сертификатов из Key Vault
  • Мониторинг производительности приложения с помощью Application Insights

Аутентификация

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

Клиенты дата-плоскости используют конечную точку службы (URL или пространство имен) и учетные данные вместо идентификатора подписки.

// Create credential that auto-discovers authentication
cred, err := azidentity.NewDefaultAzureCredential(nil)

// Blob Storage - pass the storage account URL
blobClient, err := azblob.NewClient("https://mystorageaccount.blob.core.windows.net/", cred, nil)

// Key Vault secrets - pass the vault URL
secretClient, err := azsecrets.NewClient("https://mykeyvault.vault.azure.net/", cred, nil)

// Service Bus - pass the fully qualified namespace
sbClient, err := azservicebus.NewClient("mynamespace.servicebus.windows.net", cred, nil)

Некоторые службы также поддерживают строки подключения для сред, в которых недоступна аутентификация на основе токенов:

// Connection string authentication (when token auth is not available)
client, err := azservicebus.NewClientFromConnectionString(connectionString, nil)

Для рабочих задач в Azure используйте управляемое удостоверение. Для локальной разработки DefaultAzureCredential автоматически обнаруживает учетные данные из az login, переменных среды или других источников.

Полное руководство по типам учетных данных и рекомендациям см. в разделе Аутентификация при помощи Azure SDK для Go и документации по пакету azidentity.

Постраничная разбивка

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

// Create a pager for listing large result sets
pager := client.NewListSecretPropertiesPager(nil)

// Iterate through pages until no more results
for pager.More() {
	page, err := pager.NextPage(ctx)
	if err != nil {
		return err
	}

	for _, item := range page.Value {
		fmt.Println(*item.ID)
	}
}

Методы, возвращающие *Pager типы, следуют этому же шаблону итерации во всех пакетах плоскости данных.

Дополнительные сведения о разбиении на страницы и других распространенных шаблонах см. в Common usage patterns in Azure SDK for Go.

Обработка ошибок

Операции уровня данных возвращают структурированные ошибки, которые можно исследовать на предмет определенных кодов ошибок.

import "github.com/Azure/azure-sdk-for-go/sdk/azcore"

// Check if the error is an Azure service error with structured details
var respErr *azcore.ResponseError
if errors.As(err, &respErr) {
	fmt.Printf("Error code: %s\n", respErr.ErrorCode)
	fmt.Printf("Status code: %d\n", respErr.StatusCode)
}

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

Загрузка примера BLOB

В этом примере показан готовый к работе шаблон: проверка подлинности с помощью DefaultAzureCredential, создание клиента объекта Blob, отправка данных с тайм-аутом и проверка. Этот шаблон применяется ко всем клиентам канала передачи данных. Переключите конечную точку службы и тип клиента, чтобы адаптировать ее для служебная шина, Центров событий, Cosmos DB или Key Vault.

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

func main() {
	accountURL := "https://<storage-account-name>.blob.core.windows.net/"
	containerName := "demo"
	blobName := "hello.txt"
	data := []byte("hello from Go")

	// Create credential that auto-discovers authentication
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		log.Fatalf("failed to create credential: %v", err)
	}

	// Set a timeout to prevent hanging on network issues
	ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
	defer cancel()

	// Create a client for the storage account
	client, err := azblob.NewClient(accountURL, cred, nil)
	if err != nil {
		log.Fatalf("failed to create blob client: %v", err)
	}

	// Upload data directly from a byte slice
	_, err = client.UploadBuffer(ctx, containerName, blobName, data, nil)
	if err != nil {
		log.Fatalf("failed to upload blob: %v", err)
	}

	fmt.Printf("uploaded %s to container %s\n", blobName, containerName)
}

Blob-хранилище

Пакет azblob предоставляет доступ к плоскости данных Хранилище BLOB-объектов Azure, масштабируемой службе хранилища объектов. Этот пакет используется приложением во время выполнения для чтения и записи данных. Используйте отдельный armstorage пакет управляющей плоскости для развертывания учетных записей хранения и контейнеров.

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

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

Для начала ознакомьтесь с Quickstart: клиентский модуль Хранилище BLOB-объектов Azure для Go.

Документацию по пакету см. в справочнике по пакету azblob package.

Cosmos DB

Пакет azcosmos предоставляет доступ к уровню данных Azure Cosmos DB, глобально распределенной многомодельной базе данных. Используйте его для создания приложений, которым требуется низкая задержка чтения и записи в любом масштабе.

Используйте его для выполнения операций CRUD с документами, выполнения запросов SQL к контейнерам, управления стратегиями секционирования для эффективного доступа к данным, обработки разбиения на страницы по большим результирующих наборам и выполнения пакетных операций с несколькими элементами.

go get github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos

Чтобы начать, см. Quickstart: Использование Azure Cosmos DB для NoSQL с Azure SDK для Go.

Документацию по пакету см. в справочнике azcosmos.

Центры событий

Пакет azeventhubs предоставляет доступ к плоскости данных Центры событий Azure — службе приема данных в режиме реального времени для потоковой передачи событий высокой пропускной способности.

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

go get github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs

Чтобы приступить к работе, см. краткое руководство. Отправка событий в центры событий или получение событий из Центров событий с помощью Go.

Документацию по пакету см. в справочнике по пакету azeventhubs.

Key Vault

Пакеты azsecrets, azkeys и azcertificates предоставляют доступ к Azure Key Vault плоскости данных. Эти пакеты приложения используются во время выполнения для получения секретов и выполнения криптографических операций. Используйте отдельный armkeyvault пакет уровня управления для подготовки и настройки экземпляров хранилища.

Используйте их для получения и задания секретов (паролей баз данных, ключей API), создания криптографических ключей для подписывания и шифрования, управления сертификатами TLS/SSL с автоматическим продлением, отслеживанием версий секретов и реализацией стратегий поворота, а также секретами кэша для уменьшения задержки и вызовов API.

go get github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets
go get github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys
go get github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azcertificates

Сведения о начале работы с Key Vault см. в статье Quickstart: клиентская библиотека сертификатов Azure Key Vault для Go.

Документацию по пакету см. в ссылках на пакеты azsecrets, azkeys и azcertificates.

служебная шина

Пакет azservicebus предоставляет доступ к уровню данных Служебная шина Azure — это полностью управляемый брокер сообщений, обеспечивающий надежное асинхронное взаимодействие.

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

go get github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus

Сведения о начале работы с Служебная шина Azure см. в статье Quickstart: отправка сообщений и получение сообщений из очередей Служебная шина Azure (Go).

Документацию по пакету см. в справочнике по пакету azservicebus.

Аналитика приложений

Модуль ApplicationInsights-Go обеспечивает интеграцию телеметрии со службой мониторинга производительности приложений приложение Azure Insights, представляющей собой сервис (APM) Azure.

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

go get github.com/microsoft/ApplicationInsights-Go

Сведения о службе см. в обзоре Application Insights.

Дальнейшие действия