Udostępnij za pośrednictwem


Najlepsze praktyki dotyczące konfiguracji usługi Azure App Configuration

W tym artykule omówiono typowe wzorce i najlepsze praktyki dotyczące korzystania z usługi Azure App Configuration.

Grupowania kluczy

Usługa App Configuration udostępnia dwie opcje organizowania kluczy:

  • Prefiksy kluczy
  • Etykiety

Do grupowania kluczy można użyć jednej lub obu opcji.

prefiksy kluczy umożliwiają grupowanie powiązanych kluczy przy użyciu wspólnego prefiksu w nazwach. Prefiksy mogą zawierać wiele segmentów rozdzielonych ogranicznikami, takimi jak / lub :, tworząc hierarchiczną przestrzeń nazw. Takie podejście jest przydatne podczas przechowywania kluczy konfiguracji dla wielu aplikacji lub mikrousług w jednym magazynie usługi App Configuration.

Należy pamiętać, że klucze są bezpośrednio przywoływane przez kod aplikacji, aby pobrać odpowiadające im wartości. W związku z tym klucze powinny pozostać stabilne, aby uniknąć zmian w kodzie. W razie potrzeby możesz użyć dostawcy usługi App Configuration do przycinania prefiksów kluczy w czasie wykonywania.

Etykiety umożliwiają tworzenie odmian klucza, takich jak różne wersje lub ustawienia specyficzne dla środowiska. Przypisując etykiety, można zachować wiele wartości dla tego samego klucza. Następnie aplikacja może pobrać różne zestawy wartości kluczowych, określając odpowiednią etykietę, co pozwala zachować spójność odwołań do kluczy w kodzie.

Kompozycje klucz-wartość

Usługa App Configuration traktuje każdy klucz przechowywany w nim jako niezależną jednostkę. Nie wywnioskuje relacji między kluczami ani dziedziczy wartości w oparciu o hierarchię kluczy. Można jednak efektywnie agregować wiele zestawów kluczy, z użyciem etykiet i warstwowania konfiguracji w aplikacji.

Rozważmy przykład, w którym masz ustawienie konfiguracji o nazwie TestApp:MySetting, którego wartość różni się w zależności od środowiska. Możesz utworzyć dwa klucze o tej samej nazwie, ale przypisać różne etykiety — jedną bez etykiety (ustawienie domyślne) i drugą z etykietą Development. Klucz bez etykiety zawiera wartość domyślną, a oznaczony klucz zawiera wartość specyficzną dla środowiska.

W kodzie aplikacji należy najpierw załadować domyślne (niezaznaczone) wartości klucza, a następnie załadować wartości klucz-specyficzne dla środowiska przy użyciu etykiety Development. Podczas ładowania drugiego zestawu wszystkie pasujące klucze zastępują wcześniej załadowane wartości. Takie podejście pozwala na "nakładanie" wielu zestawów konfiguracji, gdzie ostatnia załadowana wartość ma pierwszeństwo. Dostawcy App Configuration w obsługiwanych językach i na platformach oferują tę funkcjonalność stosu.

W poniższym przykładzie pokazano, jak zaimplementować kompozycję klucz-wartość w aplikacji .NET:

configBuilder.AddAzureAppConfiguration(options => {
    options.Connect(new Uri("<your-app-config-endpoint>"), new DefaultAzureCredential())
           // Load all keys that start with `TestApp:` and compose with two different labels
           .Select(keyFilter: "TestApp:*", labelFilter: LabelFilter.Null)
           .Select(keyFilter: "TestApp:*", labelFilter: "Development");
});

Użyj etykiet, aby włączyć różne konfiguracje dla różnych środowisk , zawiera kompletny przykład.

Odświeżanie konfiguracji

Usługa Azure App Configuration obsługuje dynamiczne odświeżanie konfiguracji bez konieczności ponownego uruchamiania aplikacji. Dostawcy usługi App Configuration mogą monitorować zmiany konfiguracji przy użyciu dwóch metod:

Monitorowanie wszystkich wybranych kluczy

W tym podejściu dostawca monitoruje wszystkie wybrane klucze. Jeśli w dowolnej z wybranych par klucz-wartość zostanie wykryta zmiana, konfiguracja zostanie przeładowana. Takie podejście zapewnia natychmiastowe aktualizacje bez konieczności dodatkowych modyfikacji kluczy.

configBuilder.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri("<your-app-config-endpoint>"), new DefaultAzureCredential())
           // Load all keys that start with `TestApp:` and have no label
           .Select(keyFilter: "TestApp:*", labelFilter: LabelFilter.Null)
           .ConfigureRefresh(refreshOptions =>
           {
               // Trigger full configuration refresh when any selected key changes.
               refreshOptions.RegisterAll();
           });
});

Monitorowanie klucza strażnika

Alternatywnie można śledzić pojedynczy klucz, często nazywany kluczem sentinela . 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ść.

configBuilder.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri("<your-app-config-endpoint>"), new DefaultAzureCredential())
           // Load all keys that start with `TestApp:` and have no label
           .Select(keyFilter: "TestApp:*", labelFilter: LabelFilter.Null)
           .ConfigureRefresh(refreshOptions =>
           {
               // Trigger full configuration refresh only if the `SentinelKey` changes.
               refreshOptions.Register("SentinelKey", refreshAll: true);
           });
});

Oba podejścia są dostępne za pośrednictwem dostawców usługi App Configuration w obsługiwanych językach i platformach.

Aby zmniejszyć ryzyko niespójności konfiguracji, użyj migawek konfiguracji , aby zapewnić jej integralność.

Odwołania do danych zewnętrznych

Usługa App Configuration jest przeznaczona do przechowywania wszelkich danych konfiguracji, które zwykle są zapisywane w plikach konfiguracji lub zmiennych środowiskowych. Jednak niektóre typy danych mogą być lepiej dostosowane do przechowywania w innych źródłach. Na przykład przechowuj wpisy tajne w usłudze Key Vault, pliki w usłudze Azure Storage, informacje o członkostwie w grupach firmy Microsoft lub listy klientów w bazie danych.

Nadal możesz korzystać z usługi App Configuration, przechowując odwołanie do danych zewnętrznych w parze klucz-wartość. Możesz użyć typu zawartości, aby odróżnić każde źródło danych. Gdy aplikacja odczytuje odwołanie, ładuje rzeczywiste dane ze źródła, do którego się odnosi, zakładając, że ma niezbędne uprawnienia do tego źródła. Jeśli zmienisz lokalizację danych zewnętrznych, wystarczy zaktualizować odwołanie w usłudze App Configuration zamiast aktualizować i ponownie wdrażać całą aplikację.

Funkcja referencyjna Key Vault w usłudze App Configuration jest przykładem w tym przypadku. Umożliwia ona aktualizowanie wpisów tajnych wymaganych przez aplikację w razie potrzeby, podczas gdy same podstawowe wpisy tajne pozostają w usłudze Key Vault.

Konfiguracja początkowa aplikacji

Aby uzyskać dostęp do magazynu usługi Azure App Configuration, możesz uwierzytelnić się przy użyciu ciągu połączenia lub Microsoft Entra ID. Parametry połączenia są łatwo dostępne w portalu Azure, ale zawierają informacje o poświadczeniach i muszą być traktowane jako tajne. Jeśli wybierzesz to podejście, zapisz parametry połączenia bezpiecznie w usłudze Azure Key Vault i upewnij się, że aplikacja uwierzytelnia się w usłudze Key Vault, aby ją pobrać.

Bezpieczniejszym i zalecanym podejściem jest użycie uwierzytelniania identyfikatora Entra firmy Microsoft. Jeśli aplikacja jest hostowana na platformie Azure — na przykład w usłudze Azure Kubernetes Service, App Service lub Azure Functions — możesz użyć tożsamości zarządzanych udostępnianych przez identyfikator firmy Microsoft Entra. Tożsamości zarządzane eliminują konieczność zarządzania tajemnicami. W przypadku tej metody aplikacja wymaga tylko adresu URL punktu końcowego usługi App Configuration, który można bezpiecznie osadzić w kodzie aplikacji lub plikach konfiguracji.

Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanych do uzyskiwania dostępu do usługi App Configuration.

Dostęp usługi Azure Kubernetes Service do usługi App Configuration

Następujące opcje są dostępne dla zasobów hostowanych w usłudze Azure Kubernetes Service (AKS), aby uzyskać dostęp do Azure App Configuration. Te opcje dotyczą również ogólnie platformy Kubernetes.

  • Dodaj dostawcę Kubernetes dla usługi Azure App Configuration do klastra AKS. Dostawca Kubernetes działa jako pod w klastrze. Może on tworzyć ConfigMaps i Secrets z kluczy-wartości i odwołań usługi Key Vault w magazynie usługi App Configuration. ConfigMap i Secret są używane jako zmienne środowiskowe lub zainstalowane pliki bez konieczności modyfikacji kodu aplikacji. Jeśli masz wiele aplikacji działających w tym samym klastrze AKS, wszystkie mogą uzyskiwać dostęp do wygenerowanych ConfigMaps i Secrets, eliminując potrzebę wysyłania osobnych żądań do App Configuration. Dostawca Kubernetes obsługuje również aktualizacje konfiguracji dynamicznej. Jest to zalecana opcja, jeśli jest to możliwe dla Ciebie.

  • Zaktualizuj aplikację, aby korzystała z bibliotek dostawcy Azure App Configuration. Biblioteki dostawcy są dostępne w wielu strukturach i językach, takich jak ASP.NET, .NET, Java Spring, JavaScript/Node.js i Python. Takie podejście zapewnia pełny dostęp do funkcji usługi App Configuration, w tym dynamicznej konfiguracji i zarządzania funkcjami. Masz szczegółową kontrolę nad tym, jakie dane mają być ładowane, oraz z którego magazynu usługi App Configuration dla każdej aplikacji.

  • Integracja z wdrożeniem platformy Kubernetes przy użyciu programu Helm. Jeśli nie chcesz aktualizować aplikacji ani dodawać nowego zasobnika do klastra AKS, masz możliwość przenosić dane z usługi App Configuration do klastra Kubernetes przy użyciu Helm poprzez wdrożenie. Takie podejście umożliwia aplikacji kontynuowanie uzyskiwania dostępu do konfiguracji ze zmiennych Kubernetes i Sekretów. Uaktualnienie programu Helm można uruchomić za każdym razem, gdy aplikacja ma uwzględniać nowe zmiany konfiguracji.

Dostęp usługi App Service lub usługi Azure Functions do usługi App Configuration

Użyj dostawcy usługi App Configuration lub bibliotek zestawu SDK, aby uzyskać dostęp do usługi App Configuration bezpośrednio w aplikacji. Takie podejście zapewnia pełny dostęp do funkcji usługi App Configuration, w tym dynamicznej konfiguracji i zarządzania funkcjami. Aplikacja działająca w usłudze App Service lub usłudze Azure Functions może uzyskać dostęp do magazynu usługi App Configuration za pomocą dowolnej z następujących metod:

Możesz również udostępnić dane konfiguracji aplikacji jako ustawienia aplikacji lub zmienne środowiskowe. Dzięki temu podejściu można uniknąć zmiany kodu aplikacji.

Ograniczanie żądań wysyłanych do usługi App Configuration

Nadmierne żądania do usługi App Configuration mogą spowodować ograniczenie przepustowości lub opłaty nadwyżkowe. Aby zmniejszyć liczbę wykonanych żądań:

  • Zwiększ interwał odświeżania, zwłaszcza jeśli wartości konfiguracji nie zmieniają się często. Określ nowy interwał odświeżania SetRefreshInterval przy użyciu metody .

  • Obserwuj pojedynczy klucz sentinela, zamiast obserwować poszczególne klucze. Odśwież wszystkie konfiguracje tylko wtedy, gdy klucz sentinel ulegnie zmianie. Zobacz Używanie konfiguracji dynamicznej w aplikacji ASP.NET Core, aby zapoznać się z przykładem.

  • Użyj App Configuration Kubernetes Provider, jeśli uruchamiasz wiele obciążeń w klastrze Kubernetes, z których każda z nich pobiera dane z usługi App Configuration pojedynczo. Dostawca Kubernetes pobiera dane z usługi App Configuration i udostępnia je jako Kubernetes ConfigMaps i Secrets. Dzięki temu obciążenia mogą uzyskiwać dostęp do danych za pośrednictwem obiektów ConfigMaps i Secret bez konieczności oddzielnego ściągania danych z usługi App Configuration.

  • Włącz geograficzną replikację twojego magazynu usługi App Configuration i rozłóż żądania na wiele replik. Na przykład użyj innej repliki z każdego regionu geograficznego dla globalnie wdrożonej aplikacji. Każda replika usługi App Configuration ma oddzielny limit przydziału żądań. Ta konfiguracja zapewnia model umożliwiający skalowalność i zwiększoną odporność na przejściowe i regionalne awarie.

Importowanie danych konfiguracji do usługi App Configuration

Usługa App Configuration oferuje opcję zbiorczego importowania ustawień konfiguracji z bieżących plików konfiguracji przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia. Możesz również użyć tych samych opcji, aby wyeksportować wartości kluczy z App Configuration, na przykład między powiązanymi sklepami. Jeśli stosujesz Konfigurację jako Kod i zarządzasz konfiguracjami w GitHub lub Azure DevOps, możesz skonfigurować ciągły import plików konfiguracji przy użyciu GitHub Actions lub zadania Import Azure Pipeline.

Wdrażanie w wielu regionach w usłudze App Configuration

Jeśli aplikacja jest wdrożona w wielu regionach, zalecamy włączenie replikacji geograficznej sklepu App Configuration. Możesz zezwolić aplikacji na łączenie się głównie z repliką zgodną z regionem, w którym wdrożono wystąpienia aplikacji, i umożliwić im przełączanie w tryb failover do replik w innych regionach. Ta konfiguracja minimalizuje opóźnienie między aplikacją a usługą App Configuration, rozkłada obciążenie, ponieważ każda replika ma oddzielne przydziały ograniczania przepustowości i zwiększa odporność aplikacji na przejściowe i regionalne awarie. Aby uzyskać więcej informacji, zobacz odporność i odzyskiwanie po awarii.

Kompilowanie aplikacji z wysoką odpornością

Aplikacje często polegają na konfiguracji przy uruchamianiu, co czyni wysoką dostępność Azure App Configuration krytyczną. Aby zapewnić lepszą odporność, aplikacje powinny używać funkcji niezawodności usługi App Configuration i rozważyć podjęcie następujących działań na podstawie określonych wymagań.

  • Udostępnij w regionach z obsługą stref dostępności Azure. Strefy dostępności umożliwiają aplikacjom odporność na awarie centrum danych. Usługa App Configuration oferuje nadmiarowość stref dla wszystkich klientów bez dodatkowych kosztów. Zaleca się utworzenie magazynu usługi App Configuration w regionach z obsługą stref dostępności. Możesz znaleźć listę regionów, w których usługa App Configuration włączyła obsługę stref dostępności.
  • Włącz replikację geograficzną i zezwól aplikacji na przejście w tryb failover lub rozłożenie obciążenia między replikami. Ta konfiguracja zapewnia model umożliwiający skalowalność i zwiększoną odporność na błędy przejściowe i awarie regionalne. Aby uzyskać więcej informacji, zobacz odporność i odzyskiwanie po awarii.
  • Wdrażanie konfiguracji przy użyciu bezpiecznych rozwiązań wdrażania. Nieprawidłowe lub przypadkowe zmiany konfiguracji mogą często powodować przestoje aplikacji. Należy unikać wprowadzania zmian konfiguracji, które mają wpływ na produkcję bezpośrednio z witryny Azure Portal, jeśli jest to możliwe. W przypadku bezpiecznych praktyk wdrażania (SDP) należy użyć progresywnego modelu wdrażania, aby zminimalizować potencjalny obszar wpływu problemów spowodowanych wdrożeniem. W przypadku wdrożenia protokołu SDP można skompilować i przetestować migawkę konfiguracji przed wdrożeniem jej w środowisku produkcyjnym. Podczas wdrażania można zaktualizować wystąpienia aplikacji, aby stopniowo wykorzystywać nową migawkę. Jeśli wykryto problemy, możesz wycofać zmianę, ponownie wdrażając migawkę ostatniego znanego dobrego (LKG). Migawka jest niezmienna, co gwarantuje spójność we wszystkich wdrożeniach. Możesz używać migawek wraz z konfiguracją dynamiczną. Użyj migawki dla konfiguracji podstawowej i konfiguracji dynamicznej dla przesłonięć konfiguracji awaryjnej i flag funkcji.
  • Dołącz konfigurację do aplikacji. Jeśli chcesz mieć pewność, że aplikacja zawsze ma dostęp do kopii konfiguracji lub jeśli wolisz uniknąć zależności środowiska uruchomieniowego od usługi App Configuration, możesz całkowicie ściągnąć konfigurację z usługi App Configuration podczas kompilacji lub wydania i dołączyć ją do aplikacji. Aby dowiedzieć się więcej, zapoznaj się z przykładami integracji usługi App Configuration z potokiem CI/CD lub wdrożeniem w rozwiązaniu Kubernetes.
  • Użyj dostawców usługi App Configuration. Aplikacje odgrywają kluczową rolę w osiąganiu wysokiej odporności, ponieważ mogą uwzględniać problemy występujące w czasie wykonywania, takie jak problemy z siecią, i szybciej reagować na błędy. Dostawcy App Configuration oferują szereg wbudowanych funkcji odporności, w tym automatyczne odnajdywanie replik, przełączanie awaryjne repliki, ponawianie prób uruchamiania z dostosowywalnymi limitami czasu, buforowanie konfiguracji i strategie adaptacyjne dla niezawodnego odświeżania konfiguracji. Zdecydowanie zaleca się korzystanie z tych funkcji za pomocą dostawców usługi App Configuration. Jeśli nie jest to opcja, rozważ zaimplementowanie podobnych funkcji w rozwiązaniu niestandardowym, aby osiągnąć najwyższy poziom odporności.

Aplikacje klienckie w usłudze App Configuration

W przypadku korzystania z usługi App Configuration w aplikacjach klienckich należy wziąć pod uwagę dwa główne czynniki. Po pierwsze, jeśli używasz ciągu połączenia w aplikacji klienckiej, ryzykujesz ujawnienie klucza dostępu do magazynu App Configuration dla innych. Po drugie, typowa skala aplikacji klienckiej może powodować nadmierne żądania do sklepu App Configuration, co może spowodować dodatkowe opłaty lub ograniczenie przepustowości. Aby uzyskać więcej informacji na temat ograniczania przepustowości, zobacz często zadawane pytania.

Aby rozwiązać te problemy, zalecamy użycie usługi proxy między aplikacjami klienckimi a magazynem App Configuration. Usługa proxy może bezpiecznie uwierzytelniać się z magazynem App Configuration bez ryzyka wycieku informacji uwierzytelniania. Usługę serwera proxy można utworzyć przy użyciu jednej z bibliotek dostawcy usługi App Configuration, dzięki czemu można korzystać z wbudowanych funkcji buforowania i odświeżania w celu optymalizacji liczby żądań wysyłanych do usługi App Configuration. Aby uzyskać więcej informacji na temat korzystania z dostawców usługi App Configuration, zobacz artykuły w sekcjach Quickstarts i samouczkach. Usługa proxy obsługuje konfigurację z pamięci podręcznej do aplikacji klienckich i unikasz dwóch potencjalnych problemów omówionych w tej sekcji.

Aplikacje wielodostępne w usłudze App Configuration

Aplikacja wielodostępna jest oparta na architekturze, w której współużytkowane wystąpienie aplikacji obsługuje wielu klientów lub dzierżawców. Na przykład możesz mieć usługę poczty e-mail, która oferuje użytkownikom oddzielne konta i spersonalizowane doświadczenia. Aplikacja zwykle zarządza różnymi konfiguracjami dla każdego najemcy. Oto kilka zagadnień architektonicznych związanych z używaniem App Configuration w aplikacji wielodostępnej. Możesz również odwołać się do przykładowego kodu konfiguracji aplikacji wielodostępnych.

Konfiguracja jako kod

Konfiguracja jako kod to praktyka zarządzania plikami konfiguracji w systemie kontroli źródła, na przykład repozytorium git. Zapewnia korzyści, takie jak śledzenie i proces zatwierdzania w przypadku wszelkich zmian konfiguracji. Jeśli przyjmiesz konfigurację jako kod, App Configuration oferuje narzędzia ułatwiające zarządzanie danymi konfiguracji w plikach i wdrażanie ich w ramach procesu budowania, wydania lub CI/CD. Dzięki temu aplikacje mogą uzyskiwać dostęp do najnowszych danych ze sklepu App Configuration.

  • W przypadku usługi GitHub możesz zaimportować pliki konfiguracji z repozytorium GitHub do magazynu usługi App Configuration przy użyciu funkcji GitHub Actions
  • W przypadku usługi Azure DevOps możesz dołączyć Azure App Configuration Import, zadanie potoku Azure, w potokach kompilacji lub wydania, aby synchronizować dane.
  • W przypadku innych możesz zaimportować pliki konfiguracji do usługi App Configuration przy użyciu interfejsu wiersza polecenia platformy Azure w ramach systemu ciągłej integracji/ciągłego wdrażania. Aby uzyskać więcej informacji, zobacz az appconfig kv import.

Ten model umożliwia uwzględnienie kroków weryfikacji i testowania przed zatwierdzeniem danych w usłudze App Configuration. Jeśli używasz wielu magazynów usługi App Configuration, możesz również wypchnąć dane konfiguracji do nich przyrostowo lub jednocześnie.

Następne kroki