مشاركة عبر


التشغيل السريع: إنشاء تطبيق وحدة تحكم Go باستخدام Azure App Configuration

في هذا التشغيل السريع، يمكنك استخدام Azure App Configuration لمركزية التخزين وإدارة إعدادات التطبيق باستخدام مكتبة عميل موفر Azure App Configuration Go.

يبسط موفر App Configuration ل Go جهود تطبيق قيم المفاتيح من Azure App Configuration إلى تطبيق Go. وهو يمكن إعدادات الربط من بنية Go. يوفر ميزات مثل تكوين التكوين من تسميات متعددة، وقص بادئة المفتاح، والدقة التلقائية لمراجع Key Vault، وغيرها الكثير.

Prerequisites

إضافة قيم رئيسية

أضف قيم المفاتيح التالية إلى متجر App Configuration. لمزيد من المعلومات حول كيفية إضافة قيم المفاتيح إلى مخزن باستخدام مدخل Microsoft Azure أو CLI، انتقل إلى إنشاء قيمة مفتاح.

Key Value نوع المحتوى
Config.Message مرحبا بالعالم! اتركه فارغا
Config.App.Name تطبيق وحدة التحكم Go اتركه فارغا
Config.App.Debug true اتركه فارغا
Config.App.Settings {"المهلة": 30، "retryCount": 3} application/json

الاتصال ب App Configuration

  1. إنشاء دليل جديد للمشروع.

    mkdir app-configuration-quickstart
    cd app-configuration-quickstart
    
  2. تهيئة وحدة نمطية Go جديدة.

    go mod init app-configuration-quickstart
    
  3. أضف موفر Azure App Configuration كتبعية.

    go get github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration
    
  4. إنشاء ملف باسم appconfig.go بالمحتوى التالي. يمكنك الاتصال بمخزن App Configuration باستخدام معرف 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 إلى نقطة نهاية متجر تكوين التطبيق الموجود ضمن نظرة عامة على متجرك في مدخل Microsoft Azure.

    إذا كنت تستخدم موجه الأوامر Windows، فشغل الأمر التالي، ثم أعد تشغيل موجه الأوامر للسماح للتغيير بتنفيذ الأمر:

    setx AZURE_APPCONFIG_ENDPOINT "<endpoint-of-your-app-configuration-store>"
    

    إذا كنت تستخدم PowerShell، فقم بتشغيل الأمر التالي:

    $Env:AZURE_APPCONFIG_ENDPOINT = "<endpoint-of-your-app-configuration-store>"
    

    إذا كنت تستخدم macOS أو Linux، فقم بإجراء الأمر التالي:

    export AZURE_APPCONFIG_ENDPOINT='<endpoint-of-your-app-configuration-store>'
    

    بالإضافة إلى ذلك، تأكد من تسجيل الدخول باستخدام 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!"}
    

تنظيف الموارد

إذا كنت لا تريد مواصلة استخدام الموارد التي تم إنشاؤها في هذه المقالة، يوصى بحذف مجموعة الموارد التي أنشأتها هنا لتجنب الرسوم.

Important

حذف مجموعة الموارد لا يمكن التراجع عنه. يتم حذف مجموعة الموارد وجميع الموارد المضمنة فيها نهائيًا. تأكد من عدم حذفك للموارد أو مجموعة المورد الخاطئة عن غير قصد. في حالة إنشاء الموارد لهذه المقالة داخل مجموعة موارد تشتمل على موارد أخرى تريد الاحتفاظ بها، احذف كل مورد على حدة من الجزء الخاص به بدلًا من حذف مجموعة الموارد.

  1. سجل الدخول إلى مدخل Microsoft Azure، وحدد Resource groups.
  2. في المربع تصفية حسب الاسم ، أدخل اسم مجموعة الموارد الخاصة بك.
  3. في قائمة النتائج، حدد اسم مجموعة الموارد لاستعراض نظرة عامة.
  4. حدد Delete resource group.
  5. يُطلب منك تأكيد حذف مجموعة الموارد. أدخل اسم مجموعة الموارد للتأكيد وحدد "Delete".

بعد بضع لحظات، يتم حذف مجموعة الموارد وكافة مواردها.

الخطوات التالية

في هذا التشغيل السريع، قمت بإنشاء متجر App Configuration جديد وتعلمت كيفية الوصول إلى قيم المفاتيح باستخدام موفر Azure App Configuration Go في تطبيق وحدة التحكم.

لمعرفة المزيد حول Azure App Configuration Go Provider، راجع المستند المرجعي.