Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Azure App Configuration to usługa zarządzana, która pomaga deweloperom w prosty i bezpieczny sposób scentralizować konfigurację aplikacji. Biblioteka dostawcy konfiguracji języka Go umożliwia ładowanie konfiguracji z magazynu usługi Azure App Configuration w zarządzany sposób. Ta biblioteka klienta dodaje dodatkowe funkcje w oparciu o zestaw Azure SDK dla języka Go.
Ładowanie konfiguracji
Dostawca języka Go usługi Azure App Configuration umożliwia ładowanie wartości konfiguracji ze sklepu Azure App Configuration do aplikacji języka Go. Możesz nawiązać połączenie przy użyciu uwierzytelniania microsoft Entra ID lub parametrów połączenia.
Aby użyć dostawcy konfiguracji języka Go, zainstaluj pakiet:
go get github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration
Load Wywołasz funkcję z azureappconfiguration pakietu, aby załadować konfigurację z usługi Azure App Configuration. Funkcja Load akceptuje opcje uwierzytelniania i opcje konfiguracji, aby dostosować zachowanie ładowania.
Aby uwierzytelnić się w magazynie App Configuration, możesz użyć DefaultAzureCredential lub dowolnej innej implementacji poświadczeń tokenu. Postępuj zgodnie z instrukcjami, aby przypisać swoje poświadczenie do roli Czytelnika danych konfiguracji aplikacji.
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
func main() {
ctx := context.Background()
// Get the endpoint from environment variable
endpoint := os.Getenv("AZURE_APPCONFIG_ENDPOINT")
// 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
authOptions := azureappconfiguration.AuthenticationOptions{
Endpoint: endpoint,
Credential: credential,
}
// Load configuration from Azure App Configuration
appConfig, err := azureappconfiguration.Load(ctx, authOptions, nil)
if err != nil {
log.Fatalf("Failed to load configuration: %v", err)
}
}
Ładowanie określonych klucz-wartości przy użyciu selektorów
Domyślnie dostawca konfiguracji ładuje wszystkie wartości klucza bez etykiety z usługi App Configuration. Możesz selektywnie załadować wartości klucz-wartość, konfigurując Selectors pole w Options strukturę.
options := &azureappconfiguration.Options{
Selectors: []azureappconfiguration.Selector{
{
// Load configuration values with prefix "App:" and no label
KeyFilter: "App:*",
LabelFilter: "",
},
{
// Load configuration values with prefix "App:" and "Prod" label
KeyFilter: "App:*",
LabelFilter: "Prod",
},
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Struktura Selector obsługuje następujące pola:
-
KeyFilter: określa klucze konfiguracji do uwzględnienia. Użyj dokładnych dopasowań, dopasowywania prefiksów z
*rozdzielanymi przecinkami wielu kluczy. - LabelFilter: wybiera wartości klucza z określoną etykietą. Jeśli jest pusty, ładuje wartości kluczy bez etykiety.
Uwaga / Notatka
Jeśli wiele selektorów obejmuje nakładające się klucze, późniejsze selektory mają pierwszeństwo przed wcześniejszymi.
Filtry tagów
Parametr TagFilters wybiera wartości klucza z określonymi tagami. Wartość-klucz jest ładowana tylko wtedy, gdy zawiera wszystkie tagi i odpowiednie wartości określone w filtrach.
options := &azureappconfiguration.Options{
Selectors: []azureappconfiguration.Selector{
{
// Load configuration values with prefix "App:" and specific tags
KeyFilter: "App:*",
TagFilters: []string{"env=prod"},
},
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Uwaga / Notatka
Znaki gwiazdki (*), przecinek (,) i ukośnik odwrotny (\) są zastrzeżone i muszą zostać uniknięte ukośnikiem odwrotnym, gdy są używane w filtrze tagu.
Przycinanie prefiksu z kluczy
Podczas ładowania wartości konfiguracji z określonymi prefiksami można użyć TrimKeyPrefixes opcji usuwania tych prefiksów z kluczy w konfiguracji. Umożliwia to tworzenie bardziej przejrzystych kluczy konfiguracji w aplikacji, jednocześnie zachowując porządek w magazynie App Configuration.
options := &azureappconfiguration.Options{
// Load configuration values with prefix "TestApp:" and trim the prefix
Selectors: []azureappconfiguration.Selector{
{
KeyFilter: "TestApp:*",
},
},
TrimKeyPrefixes: []string{"TestApp:"},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Jeśli na przykład magazyn usługi App Configuration zawiera klucz o nazwie TestApp:Settings:Message, będzie dostępny w aplikacji jako Settings:Message po usunięciu prefiksu TestApp:.
Obsługa typów zawartości JSON
Możesz utworzyć wartości kluczy JSON w usłudze App Configuration. Gdy odczytuje się klucz-wartość z typem "application/json" zawartości, dostawca konfiguracji przeanalizuje go w zagnieżdżonych strukturach. Aby uzyskać więcej informacji, zobacz Use content type to store JSON key-values in App Configuration (Używanie typu zawartości do przechowywania wartości kluczy JSON w usłudze App Configuration).
Uwaga / Notatka
Począwszy od wersji 1.2.0, dostawca konfiguracji zezwala na komentarze zgodnie z definicją w formacie (JSONC) w wartościach klucza z typem application/json zawartości.
Korzystanie z konfiguracji
AzureAppConfiguration Typ zwracany przez Load funkcję udostępnia kilka metod uzyskiwania dostępu do danych konfiguracji:
Unmarshal do struktur
Metoda Unmarshal zapewnia bezpieczny typ sposób ładowania wartości konfiguracji do struktur języka Go. Takie podejście uniemożliwia błędy środowiska uruchomieniowego z błędnie wtypowanych kluczy konfiguracji i sprawia, że kod jest bardziej konserwowalny. Metoda akceptuje opcjonalny ConstructionOptions parametr, aby dostosować sposób mapowania kluczy konfiguracji na pola struktury.
type Config struct {
Message string
App struct {
Name string
Debug bool
Settings struct {
Timeout int
RetryCount int
}
}
}
func main() {
// ... load configuration ...
// Create a configuration struct and unmarshal into it
var config Config
if err := appConfig.Unmarshal(&config, nil); err != nil {
log.Fatalf("Failed to unmarshal configuration: %v", err)
}
// Access configuration values
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)
}
Niestandardowe separatory kluczy
Możesz dostosować sposób mapowania kluczy konfiguracji na pola struktury przy użyciu polecenia ConstructionOptions. Jest to przydatne, gdy klucze konfiguracji używają różnych separatorów niż domyślna kropka (.):
// Configuration keys using colon separator: "App:Name", "App:Settings:Timeout"
constructionOptions := &azureappconfiguration.ConstructionOptions{
Separator: ":",
}
var config Config
if err := appConfig.Unmarshal(&config, constructionOptions); err != nil {
log.Fatalf("Failed to unmarshal configuration: %v", err)
}
Struktura ConstructionOptions obsługuje następujące separatory: ., , ,;, -, ___, , /, . : Jeśli nie zostanie określony, zostanie użyty separator . domyślny.
Pobieranie nieprzetworzonych bajtów JSON
Metoda GetBytes pobiera konfigurację jako nieprzetworzone dane JSON, zapewniając elastyczność integracji z bibliotekami przetwarzania JSON lub strukturami konfiguracji, takimi jak viper. Ta metoda akceptuje również opcjonalny ConstructionOptions parametr służący do kontrolowania mapowania hierarchii kluczy.
// Get configuration as JSON bytes with default separator
jsonBytes, err := appConfig.GetBytes(nil)
if err != nil {
log.Fatalf("Failed to get configuration as bytes: %v", err)
}
fmt.Println("Raw JSON Configuration:")
fmt.Println(string(jsonBytes))
// Get configuration with custom separator
constructionOptions := &azureappconfiguration.ConstructionOptions{
Separator: ":",
}
jsonBytes, err = appConfig.GetBytes(constructionOptions)
if err != nil {
log.Fatalf("Failed to get configuration as bytes: %v", err)
}
// Example: Use with viper
v := viper.New()
v.SetConfigType("json")
if err := v.ReadConfig(bytes.NewBuffer(jsonBytes)); err != nil {
log.Fatalf("Failed to read config into viper: %v", err)
}
Odświeżanie konfiguracji
Konfigurowanie odświeżania umożliwia aplikacji ściąganie najnowszych wartości ze sklepu App Configuration bez konieczności ponownego uruchamiania. Opcje odświeżania RefreshOptions można skonfigurować przy użyciu pola w Options ramach struktury. Załadowana konfiguracja zostanie zaktualizowana po wykryciu dowolnej zmiany wybranych wartości kluczy na serwerze. Domyślnie jest używany interwał odświeżania wynoszący 30 sekund, ale można go zastąpić właściwością Interval .
options := &azureappconfiguration.Options{
// Load all keys that start with `TestApp:` and have no label
Selectors: []azureappconfiguration.Selector{
{
KeyFilter: "TestApp:*",
LabelFilter: "",
},
},
// Trigger full configuration refresh when any selected key changes
RefreshOptions: azureappconfiguration.KeyValueRefreshOptions{
Enabled: true,
// Check for changes no more often than every 60 seconds
Interval: 60 * time.Second,
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Skonfigurowanie RefreshOptions samej konfiguracji nie spowoduje automatycznego odświeżenia konfiguracji. Aby wyzwolić odświeżanie, należy wywołać Refresh metodę w wystąpieniu AzureAppConfiguration .
// Trigger a refresh
if err := appConfig.Refresh(ctx); err != nil {
log.Printf("Failed to refresh configuration: %v", err)
}
Ten projekt uniemożliwia niepotrzebne żądania do usługi App Configuration, gdy aplikacja jest bezczynna. Należy dołączyć Refresh wywołanie, w którym występuje działanie aplikacji. Jest to nazywane odświeżaniem konfiguracji opartej na działaniach. Można na przykład wywołać Refresh metodę przetwarzania żądania przychodzącego lub wewnątrz iteracji, w której wykonujesz złożone zadanie.
Uwaga / Notatka
Nawet jeśli wywołanie odświeżania zakończy się niepowodzeniem z jakiegokolwiek powodu, aplikacja nadal używa konfiguracji buforowanej. Kolejna próba zostanie podjęta po upływie skonfigurowanego interwału odświeżania, a wywołanie odświeżania zostanie wyzwolone przez działanie aplikacji. Wywołanie Refresh jest operacją no-op przed upływem skonfigurowanego interwału odświeżania, więc jego wpływ na wydajność jest minimalny, nawet jeśli jest wywoływany często.
Odświeżanie klucza sentinel
Klucz sentinel to klucz aktualizowany po zakończeniu zmiany wszystkich innych kluczy. Dostawca konfiguracji monitoruje klucz strażnika zamiast wszystkich wybranych wartości klucza. Po wykryciu zmiany aplikacja odświeża wszystkie wartości konfiguracji.
Takie podejście jest przydatne podczas aktualizowania wielu par klucz-wartość. Aktualizując klucz sentinel dopiero po zakończeniu wszystkich innych zmian konfiguracji, upewnij się, że aplikacja ponownie ładuje konfigurację tylko raz, zachowując spójność.
options := &azureappconfiguration.Options{
// Load all keys that start with `TestApp:` and have no label
Selectors: []azureappconfiguration.Selector{
{
KeyFilter: "TestApp:*",
LabelFilter: "",
},
},
// Trigger full configuration refresh only if the `SentinelKey` changes
RefreshOptions: azureappconfiguration.KeyValueRefreshOptions{
Enabled: true,
WatchedSettings: []azureappconfiguration.WatchedSetting{
{
Key: "SentinelKey",
Label: "",
},
},
},
}
Wywołanie zwrotne odświeżania niestandardowego
Metoda OnRefreshSuccess rejestruje funkcję wywołania zwrotnego, która będzie wykonywana po pomyślnym odświeżeniu konfiguracji i wykryciu rzeczywistych zmian.
var config Config
if err := appConfig.Unmarshal(&config, nil); err != nil {
log.Fatalf("Failed to unmarshal configuration: %v", err)
}
// Register refresh callback
appConfig.OnRefreshSuccess(func() {
// Re-unmarshal the configuration
err := appConfig.Unmarshal(&config, nil)
if err != nil {
log.Printf("Failed to unmarshal updated configuration: %s", err)
return
}
})
Przełączniki funkcji
Flagi funkcji w Azure App Configuration zapewniają nowoczesny sposób kontrolowania dostępności funkcji w aplikacjach. W przeciwieństwie do zwykłych wartości konfiguracji flagi funkcji muszą być jawnie ładowane przy użyciu FeatureFlagOptions pola w Options strukturę.
options := &azureappconfiguration.Options{
FeatureFlagOptions: azureappconfiguration.FeatureFlagOptions{
Enabled: true,
// Load feature flags that start with `TestApp:` and have `dev` label
Selectors: []azureappconfiguration.Selector{
{
KeyFilter: "TestApp:*",
LabelFilter: "dev",
},
},
RefreshOptions: azureappconfiguration.RefreshOptions{
Enabled: true,
Interval: 60 * time.Second,
},
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Wskazówka
Jeśli nie określono selektora w FeatureFlagOptions, ładuje wszystkie flagi funkcjonalności bez etykiety w magazynie App Configuration. Domyślny interwał odświeżania flag funkcji to 30 sekund.
Ważne
Aby efektywnie korzystać z flag funkcji załadowanych z usługi Azure App Configuration i zarządzać nimi, zainstaluj pakiet i użyj go featuremanagement . Ta biblioteka zapewnia ustrukturyzowany sposób kontrolowania zachowania funkcji w aplikacji.
Zarządzanie funkcjami
Biblioteka Języka Go zarządzania funkcjami zapewnia ustrukturyzowany sposób tworzenia i uwidaczniania funkcji na podstawie flag funkcji. Biblioteka zarządzania funkcjami jest przeznaczona do pracy w połączeniu z biblioteką dostawcy konfiguracji.
Aby używać flag funkcji z biblioteką zarządzania funkcjami, zainstaluj wymagane pakiety:
go get github.com/microsoft/Featuremanagement-Go/featuremanagement
go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig
W poniższym przykładzie pokazano, jak zintegrować bibliotekę zarządzania funkcjami z dostawcą konfiguracji, aby dynamicznie kontrolować dostępność funkcji:
import (
"github.com/microsoft/Featuremanagement-Go/featuremanagement"
"github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig"
)
func main() {
// Set up authentication options
authOptions := azureappconfiguration.AuthenticationOptions{
Endpoint: endpoint,
Credential: credential,
}
// Load configuration with feature flags enabled
options := &azureappconfiguration.Options{
FeatureFlagOptions: azureappconfiguration.FeatureFlagOptions{
Enabled: true,
RefreshOptions: azureappconfiguration.RefreshOptions{
Enabled: true,
},
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
if err != nil {
log.Fatalf("Failed to load configuration: %v", err)
}
// Create feature flag provider using the Azure App Configuration
featureFlagProvider, err := azappconfig.NewFeatureFlagProvider(appConfig)
if err != nil {
log.Fatalf("Error creating feature flag provider: %v", err)
}
// Create feature manager
featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, nil)
if err != nil {
log.Fatalf("Error creating feature manager: %v", err)
}
// Use the feature manager to check feature flags
isEnabled, err := featureManager.IsEnabled("Beta")
if err != nil {
log.Printf("Error checking feature flag: %v", err)
return
}
if isEnabled {
fmt.Println("Beta feature is enabled!")
// Execute beta functionality
} else {
fmt.Println("Beta feature is disabled")
// Execute standard functionality
}
}
Aby uzyskać więcej informacji na temat korzystania z biblioteki zarządzania funkcjami języka Go, przejdź do przewodnika Szybki start flagi funkcji.
Dokumentacja usługi Key Vault
aplikacja systemu Azure Configuration obsługuje odwoływanie się do wpisów tajnych przechowywanych w usłudze Azure Key Vault. W usłudze App Configuration można tworzyć klucze mapowane na wpisy tajne przechowywane w usłudze Key Vault, ale można uzyskać dostęp do dowolnej innej konfiguracji po załadowaniu.
Biblioteka dostawcy konfiguracji pobiera odwołania do usługi Key Vault, podobnie jak w przypadku innych kluczy przechowywanych w usłudze App Configuration. Musisz skonfigurować dostęp do usługi Key Vault przy użyciu KeyVaultOptions pola w Options ramach struktury.
Nawiązywanie połączenia z usługą Key Vault
Dostęp do usługi Key Vault można skonfigurować, podając poświadczenia, które mogą uwierzytelniać się w wystąpieniach usługi Key Vault.
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
// Create a credential for Key Vault access
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("Failed to create credential: %v", err)
}
options := &azureappconfiguration.Options{
KeyVaultOptions: azureappconfiguration.KeyVaultOptions{
Credential: credential,
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Niestandardowy moduł rozpoznawania wpisów tajnych
Możesz również udostępnić niestandardową funkcję rozpoznawania wpisów tajnych do obsługi odwołań usługi Key Vault, gdy domyślne podejście oparte na poświadczeniach nie jest odpowiednie:
options := &azureappconfiguration.Options{
KeyVaultOptions: azureappconfiguration.KeyVaultOptions{
SecretResolver: func(ctx context.Context, keyVaultReference url.URL) (string, error) {
// Custom logic to resolve secrets
// This could integrate with your existing secret management system
// or provide fallback values for development environments
if isDevelopment {
return os.Getenv("FALLBACK_SECRET_VALUE"), nil
}
// Implement your custom secret retrieval logic here
return retrieveSecret(keyVaultReference)
},
},
}
Ważne
Jeśli aplikacja ładuje pary klucz-wartości zawierające odwołania do usługi Key Vault bez odpowiedniej konfiguracji usługi Key Vault, podczas operacji ładowania zostanie zwrócony błąd . Upewnij się, że masz prawidłowo skonfigurowany dostęp do usługi Key Vault lub program rozpoznawania wpisów tajnych.
Odświeżanie sekretów Key Vault
Usługa Azure App Configuration umożliwia konfigurowanie interwałów odświeżania tajnych danych niezależnie od cyklu odświeżania konfiguracji. Ma to kluczowe znaczenie dla bezpieczeństwa, ponieważ identyfikator URI odwołania do Key Vault w App Configuration pozostaje niezmieniony, podczas gdy ukryty sekret w Key Vault może być rotowany w ramach praktyk bezpieczeństwa.
Aby upewnić się, że aplikacja zawsze używa najbardziej bieżących wartości wpisów tajnych, skonfiguruj RefreshOptions pole w KeyVaultOptions strukturę.
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
// Create a credential for Key Vault access
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("Failed to create credential: %v", err)
}
options := &azureappconfiguration.Options{
KeyVaultOptions: azureappconfiguration.KeyVaultOptions{
Credential: credential,
RefreshOptions: azureappconfiguration.RefreshOptions{
Enabled: true,
Interval: 5 * time.Minute,
},
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Migawka
Migawka jest nazwanym, niezmiennym podzbiorem wartości kluczy sklepu App Configuration. Wartości klucza tworzące migawkę są wybierane w czasie tworzenia za pomocą filtrów kluczy i etykiet. Po utworzeniu migawki gwarantowane są wartości kluczy w ramach programu .
Można skonfigurować pole SnapshotName w strukturze Selector do ładowania wartości kluczy z migawki.
options := &azureappconfiguration.Options{
Selectors: []azureappconfiguration.Selector{
{KeyFilter: "app*", LabelFilter: "prod"},
{SnapshotName: "my-snapshot"},
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Geo-replication
Aby uzyskać informacje na temat korzystania z replikacji geograficznej, przejdź do tematu Włączanie replikacji geograficznej.
Ponów próbę ponownego uruchamiania
Ładowanie konfiguracji jest operacją krytyczną podczas uruchamiania aplikacji. Aby zapewnić niezawodność, dostawca usługi Azure App Configuration implementuje niezawodny mechanizm ponawiania prób podczas początkowego ładowania konfiguracji. Pomaga to chronić aplikację przed przejściowymi problemami z siecią, które w przeciwnym razie mogą uniemożliwić pomyślne uruchomienie.
To zachowanie można dostosować za pomocą polecenia Options.StartupOptions:
options := &azureappconfiguration.Options{
StartupOptions: azureappconfiguration.StartupOptions{
Timeout: 5 * time.Minute,
},
}
appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
Dalsze kroki
Aby dowiedzieć się, jak używać dostawcy konfiguracji języka Go, przejdź do następującego samouczka.