Быстрый старт: Создание консольного приложения Go с использованием Azure App Configuration

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

Поставщик конфигурации приложений для Go упрощает применение ключевых значений из конфигурации приложений Azure к приложению Go. Он позволяет связывать настройки с структурой Go. Предоставляются такие функции, как составление конфигурации из нескольких меток, обрезка префикса ключа, автоматическое разрешение ссылок на «Key Vault» и многое другое.

Предпосылки

Добавление ключевых значений

Добавьте следующие ключевые значения в хранилище Конфигурация приложений. Дополнительные сведения о добавлении значений ключей в хранилище с помощью портал Azure или ИНТЕРФЕЙСА командной строки см. в разделе "Создание значения ключа".

Ключ Ценность Тип контента
Config.Message Всем привет! Оставьте пустым
Config.App.Name Консольное приложение Go Оставьте пустым
Config.App.Debug истина Оставьте пустым
Параметры Config.App.Settings {"timeout": 30, "retryCount": 3} application/json

Подключение к Конфигурация приложений

  1. Создайте новый каталог для проекта.

    mkdir app-configuration-quickstart
    cd app-configuration-quickstart
    
  2. Инициализация нового модуля Go.

    go mod init app-configuration-quickstart
    
  3. Добавьте поставщика конфигурации приложений Azure в качестве зависимости.

    go get github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration
    
  4. Создайте файл appconfig.go со следующим содержимым: Вы можете подключиться к хранилищу Конфигурация приложений с помощью идентификатора Microsoft Entra (рекомендуется) или строка подключения.

     package main
    
     import (
     	"context"
     	"log"
     	"os"
    
     	"github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration"
     	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
     )
    
     func loadAzureAppConfiguration(ctx context.Context) (*azureappconfiguration.AzureAppConfiguration, error) {
     	// Get the endpoint from environment variable
     	endpoint := os.Getenv("AZURE_APPCONFIG_ENDPOINT")
     	if endpoint == "" {
     		log.Fatal("AZURE_APPCONFIG_ENDPOINT environment variable is not set")
     	}
    
     	// Create a credential using DefaultAzureCredential
     	credential, err := azidentity.NewDefaultAzureCredential(nil)
     	if err != nil {
     		log.Fatalf("Failed to create credential: %v", err)
     	}
    
     	// Set up authentication options with endpoint and credential
     	authOptions := azureappconfiguration.AuthenticationOptions{
     		Endpoint:   endpoint,
     		Credential: credential,
     	}
    
     	// Configure which keys to load and trimming options
     	options := &azureappconfiguration.Options{
     		Selectors: []azureappconfiguration.Selector{
     			{
     				KeyFilter:   "Config.*",
     				LabelFilter: "",
     			},
     		},
     		TrimKeyPrefixes: []string{"Config."},
     	}
    
     	// Load configuration from Azure App Configuration
     	appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
     	if err != nil {
     		log.Fatalf("Failed to load configuration: %v", err)
     	}
    
     	return appConfig, nil
     }
    

Unmarshal

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

Создайте файл с именем main.go со следующим содержимым:

package main

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

type Config struct {
	Message string
	App     struct {
		Name     string
		Debug    bool
		Settings struct {
			Timeout     int
			RetryCount  int
		}
	}
}

func main() {
	// Create a context with timeout
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	// Load configuration
	provider, err := loadAzureAppConfiguration(ctx)
	if err != nil {
		log.Fatalf("Error loading configuration: %v", err)
	}

	// Create a configuration object and unmarshal the loaded key-values into it
	var config Config
	if err := provider.Unmarshal(&config, nil); err != nil {
		log.Fatalf("Failed to unmarshal configuration: %v", err)
	}

	// Display the configuration values
	fmt.Println("\nConfiguration Values:")
	fmt.Println("---------------------")
	fmt.Printf("Message: %s\n", config.Message)
	fmt.Printf("App Name: %s\n", config.App.Name)
	fmt.Printf("Debug Mode: %t\n", config.App.Debug)
	fmt.Printf("Timeout: %d seconds\n", config.App.Settings.Timeout)
	fmt.Printf("Retry Count: %d\n", config.App.Settings.RetryCount)
}

байты JSON

Метод GetBytes извлекает конфигурацию в виде необработанных данных JSON, предлагая гибкую альтернативу привязке структуры. Этот подход легко интегрируется с существующими библиотеками обработки JSON, такими как стандартный encoding/json пакет или платформы конфигурации, такие как viper. Это особенно полезно при работе с динамическими конфигурациями, когда необходимо временно хранить конфигурацию или при интеграции с существующими системами, ожидающими входные данные JSON. Использование GetBytes обеспечивает прямой доступ к конфигурации в универсально совместимом формате, но по-прежнему использует возможности централизованного управления конфигурацией приложений Azure.

Измените main.go, добавив следующее содержимое:

	// Existing code in main.go
	// ... ...
	fmt.Printf("Timeout: %d seconds\n", config.App.Settings.Timeout)
	fmt.Printf("Retry Count: %d\n", config.App.Settings.RetryCount)

	// Get configuration as JSON bytes
	jsonBytes, err := provider.GetBytes(nil)
	if err != nil {
		log.Fatalf("Failed to get configuration as bytes: %v", err)
	}

	fmt.Println("\nRaw JSON Configuration:")
	fmt.Println("------------------------")
	fmt.Println(string(jsonBytes))
	
	// Initialize a new Viper instance
	v := viper.New()
	v.SetConfigType("json") // Set the config format to JSON
	
	// Load the JSON bytes into Viper
	if err := v.ReadConfig(bytes.NewBuffer(jsonBytes)); err != nil {
		log.Fatalf("Failed to read config into viper: %v", err)
	}

	// Use viper to access your configuration
	// ...

Запуск приложения

  1. Задайте переменную среды для проверки подлинности.

    Установите переменную среды с именем AZURE_APPCONFIG_ENDPOINT на значение конечной точки вашего хранилища конфигураций приложений, найденной в разделе Обзор вашего хранилища в портале Azure.

    Если вы используете командную строку Windows, выполните следующую команду и перезапустите командную строку, чтобы изменения вступили в силу:

    setx AZURE_APPCONFIG_ENDPOINT "<AppConfigurationEndpoint>"
    

    Если вы используете PowerShell, выполните следующую команду:

    $Env:AZURE_APPCONFIG_ENDPOINT = "<AppConfigurationEndpoint>"
    

    Если вы используете macOS или Linux, выполните следующую команду:

    export AZURE_APPCONFIG_ENDPOINT='<AppConfigurationEndpoint>'
    

    Кроме того, убедитесь, что вы выполнили вход с помощью Azure CLI или используйте переменные среды для проверки подлинности Azure:

    az login
    
  2. После правильного задания переменной среды выполните следующую команду, чтобы запустить пример Unmarshal и GetBytes :

    go mod tidy
    go run .
    

    Вы должны увидеть результат, аналогичный приведенному ниже:

    Configuration Values:
    ---------------------
    Message: Hello World!
    App Name: Go Console App
    Debug Mode: true
    Timeout: 30 seconds
    Retry Count: 3
    
    Raw JSON Configuration:
    ------------------------
    {"App":{"Debug":true,"Name":"Go Console App","Settings":{"retryCount":3,"timeout":30}},"Message":"Hello World!"}
    

Очистите ресурсы

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

Это важно

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все ресурсы в ней будут удалены безвозвратно. Убедитесь, что вы не удаляете случайно неправильную группу ресурсов или ресурсы. Если вы создали ресурсы для этой статьи внутри группы ресурсов, которая содержит другие ресурсы, которые вы хотите сохранить, удалите каждый ресурс индивидуально из его собственной панели, вместо того чтобы удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. В поле Фильтр по имени введите название вашей группы ресурсов.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите команду Удалить группу ресурсов.
  5. Вам предлагается подтвердить удаление группы ресурсов. Введите имя вашей группы ресурсов для подтверждения и выберите Удалить.

Через несколько мгновений группа ресурсов и все ее ресурсы будут удалены.

Дальнейшие шаги

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

Дополнительные сведения о поставщике Azure App Configuration Go см. в справочной документации.