Automatyczne tworzenie kopii zapasowych App Configuration sklepów
W tym artykule dowiesz się, jak skonfigurować automatyczną kopię zapasową wartości kluczy z magazynu podstawowego Azure App Configuration do magazynu pomocniczego. Automatyczna kopia zapasowa korzysta z integracji Azure Event Grid z App Configuration.
Po skonfigurowaniu automatycznej kopii zapasowej App Configuration opublikuje zdarzenia w celu Azure Event Grid pod kątem wszelkich zmian wprowadzonych w kluczu wartości w magazynie konfiguracji. Usługa Event Grid obsługuje różne usługi platformy Azure, z których użytkownicy mogą subskrybować zdarzenia emitowane za każdym razem, gdy są tworzone, aktualizowane lub usuwane wartości kluczy.
Omówienie
W tym artykule użyjesz usługi Azure Queue Storage do odbierania zdarzeń z usługi Event Grid i użyjesz wyzwalacza czasomierza Azure Functions do przetwarzania zdarzeń w kolejce w partiach.
Po wyzwoleniu funkcji na podstawie zdarzeń pobierze najnowsze wartości kluczy, które zostały zmienione z magazynu podstawowego App Configuration i odpowiednio zaktualizuje magazyn pomocniczy. Ta konfiguracja pomaga połączyć wiele zmian, które występują w krótkim okresie w jednej operacji tworzenia kopii zapasowej, co pozwala uniknąć nadmiernego żądania wysyłanego do magazynów App Configuration.

Aprowizowanie zasobów
Motywacją do tworzenia kopii zapasowych magazynów App Configuration jest użycie wielu magazynów konfiguracji w różnych regionach platformy Azure w celu zwiększenia odporności geograficznej aplikacji. Aby to osiągnąć, magazyny podstawowe i pomocnicze powinny znajdować się w różnych regionach świadczenia usługi Azure. Wszystkie inne zasoby utworzone w tym samouczku można aprowizować w dowolnym wybranym regionie. Dzieje się tak, ponieważ jeśli region podstawowy nie działa, nie będzie można utworzyć kopii zapasowej do momentu ponownego udostępnienia regionu podstawowego.
W tym samouczku utworzysz magazyn pomocniczy w centralus regionie i wszystkich innych zasobach westus w regionie.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure .
Wymagania wstępne
Program Visual Studio 2019 z obciążeniem programowania na platformie Azure.
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Przewodnik Szybki start dotyczący usługi Azure Cloud Shell — Bash.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze platformy Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- Ten samouczek wymaga wersji 2.3.1 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.
Tworzenie grupy zasobów
Grupa zasobów to kolekcja logiczna przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi.
Utwórz grupę zasobów za pomocą polecenia az group create.
Poniższy przykład obejmuje tworzenie grupy zasobów o nazwie <resource_group_name> w lokalizacji westus. Zamień <resource_group_name> na unikatową nazwę grupy zasobów.
resourceGroupName="<resource_group_name>"
az group create --name $resourceGroupName --location westus
Tworzenie magazynów App Configuration
Utwórz magazyny App Configuration podstawowej i pomocniczej w różnych regionach.
Zastąp <primary_appconfig_name> wartości i <secondary_appconfig_name> unikatowymi nazwami magazynów konfiguracji. Każda nazwa magazynu musi być unikatowa, ponieważ jest używana jako nazwa DNS.
primaryAppConfigName="<primary_appconfig_name>"
secondaryAppConfigName="<secondary_appconfig_name>"
az appconfig create \
--name $primaryAppConfigName \
--location westus \
--resource-group $resourceGroupName\
--sku standard
az appconfig create \
--name $secondaryAppConfigName \
--location centralus \
--resource-group $resourceGroupName\
--sku standard
Tworzenie kolejki
Utwórz konto magazynu i kolejkę do odbierania zdarzeń publikowanych przez usługę Event Grid.
storageName="<unique_storage_name>"
queueName="<queue_name>"
az storage account create -n $storageName -g $resourceGroupName -l westus --sku Standard_LRS
az storage queue create --name $queueName --account-name $storageName --auth-mode login
Włączanie dostawcy zasobów usługi Event Grid
Jeśli usługa Event Grid nie była wcześniej używana w ramach subskrypcji platformy Azure, może być konieczne zarejestrowanie dostawcy zasobów usługi Event Grid. Uruchom następujące polecenie, aby zarejestrować dostawcę:
az provider register --namespace Microsoft.EventGrid
Ukończenie rejestracji może zająć trochę czasu. Aby sprawdzić stan, uruchom polecenie:
az provider show --namespace Microsoft.EventGrid --query "registrationState"
Gdy właściwość registrationState uzyska wartość Registered, można kontynuować.
Subskrybowanie zdarzeń magazynu App Configuration
Subskrybujesz te dwa zdarzenia z magazynu podstawowego App Configuration:
Microsoft.AppConfiguration.KeyValueModifiedMicrosoft.AppConfiguration.KeyValueDeleted
Następujące polecenie tworzy subskrypcję usługi Event Grid dla dwóch zdarzeń wysłanych do kolejki. Typ punktu końcowego jest ustawiony na storagequeuewartość , a punkt końcowy jest ustawiony na identyfikator kolejki. Zastąp <event_subscription_name> ciąg nazwą wybranej subskrypcji zdarzeń.
storageId=$(az storage account show --name $storageName --resource-group $resourceGroupName --query id --output tsv)
queueId="$storageId/queueservices/default/queues/$queueName"
appconfigId=$(az appconfig show --name $primaryAppConfigName --resource-group $resourceGroupName --query id --output tsv)
eventSubscriptionName="<event_subscription_name>"
az eventgrid event-subscription create \
--source-resource-id $appconfigId \
--name $eventSubscriptionName \
--endpoint-type storagequeue \
--endpoint $queueId \
--included-event-types Microsoft.AppConfiguration.KeyValueModified Microsoft.AppConfiguration.KeyValueDeleted
Tworzenie funkcji obsługi zdarzeń z usługi Queue Storage
Konfigurowanie przy użyciu funkcji gotowych do użycia
W tym artykule będziesz pracować z funkcjami języka C#, które mają następujące właściwości:
- Stos środowiska uruchomieniowego .NET Core 3.1
- środowisko uruchomieniowe Azure Functions w wersji 3.x
- Funkcja wyzwalana przez czasomierz co 10 minut
Aby ułatwić rozpoczęcie tworzenia kopii zapasowych danych, przetestowaliśmy i opublikowaliśmy funkcję , której można użyć bez wprowadzania żadnych zmian w kodzie. Pobierz pliki projektu i opublikuj je we własnej aplikacji funkcji z poziomu programu Visual Studio.
Ważne
Nie wprowadzaj żadnych zmian w zmiennych środowiskowych w pobranym kodzie. W następnej sekcji utworzysz wymagane ustawienia aplikacji.
Tworzenie własnej funkcji
Jeśli przykładowy kod podany wcześniej nie spełnia wymagań, możesz również utworzyć własną funkcję. Aby wykonać kopię zapasową, funkcja musi być w stanie wykonać następujące zadania:
- Okresowo odczytuje zawartość kolejki, aby sprawdzić, czy zawiera powiadomienia z usługi Event Grid. Aby uzyskać szczegółowe informacje o implementacji, zapoznaj się z zestawem SDK kolejki magazynu .
- Jeśli kolejka zawiera powiadomienia o zdarzeniach z usługi Event Grid, wyodrębnij wszystkie unikatowe
<key, label>informacje z komunikatów o zdarzeniach. Kombinacja klucza i etykiety jest unikatowym identyfikatorem zmian klucz-wartość w magazynie podstawowym. - Odczytaj wszystkie ustawienia z magazynu podstawowego. Zaktualizuj tylko te ustawienia w magazynie pomocniczym, które mają odpowiednie zdarzenie w kolejce. Usuń wszystkie ustawienia z magazynu pomocniczego, które znajdowały się w kolejce, ale nie w magazynie podstawowym. Zestaw SDK App Configuration umożliwia programowe uzyskiwanie dostępu do magazynów konfiguracji.
- Usuń komunikaty z kolejki, jeśli podczas przetwarzania nie było żadnych wyjątków.
- Zaimplementuj obsługę błędów zgodnie z potrzebami. Zapoznaj się z poprzednim przykładem kodu, aby zobaczyć niektóre typowe wyjątki, które mogą być obsługiwane.
Aby dowiedzieć się więcej na temat tworzenia funkcji, zobacz: Tworzenie funkcji na platformie Azure wyzwalanej przez czasomierz i Programowanie Azure Functions przy użyciu programu Visual Studio.
Ważne
Użyj najlepszego osądu, aby wybrać harmonogram czasomierza na podstawie częstotliwości wprowadzania zmian w podstawowym magazynie konfiguracji. Uruchomienie funkcji zbyt często może spowodować ograniczenie żądań dla sklepu.
Tworzenie ustawień aplikacji funkcji
Jeśli używasz udostępnionej funkcji, potrzebujesz następujących ustawień aplikacji w aplikacji funkcji:
PrimaryStoreEndpoint: Punkt końcowy podstawowego magazynu App Configuration. Może to być na przykładhttps://{primary_appconfig_name}.azconfig.io.SecondaryStoreEndpoint: Punkt końcowy pomocniczego magazynu App Configuration. Może to być na przykładhttps://{secondary_appconfig_name}.azconfig.io.StorageQueueUri: Identyfikator URI kolejki. Może to być na przykładhttps://{unique_storage_name}.queue.core.windows.net/{queue_name}.
Następujące polecenie tworzy wymagane ustawienia aplikacji w aplikacji funkcji. Zastąp <function_app_name> ciąg nazwą aplikacji funkcji.
functionAppName="<function_app_name>"
primaryStoreEndpoint="https://$primaryAppConfigName.azconfig.io"
secondaryStoreEndpoint="https://$secondaryAppConfigName.azconfig.io"
storageQueueUri="https://$storageName.queue.core.windows.net/$queueName"
az functionapp config appsettings set --name $functionAppName --resource-group $resourceGroupName --settings StorageQueueUri=$storageQueueUri PrimaryStoreEndpoint=$primaryStoreEndpoint SecondaryStoreEndpoint=$secondaryStoreEndpoint
Udzielanie dostępu do tożsamości zarządzanej aplikacji funkcji
Użyj następującego polecenia lub Azure Portal, aby dodać tożsamość zarządzaną przypisaną przez system dla aplikacji funkcji.
az functionapp identity assign --name $functionAppName --resource-group $resourceGroupName
Uwaga
Aby wykonać wymagane tworzenie zasobów i zarządzanie rolami, twoje konto musi mieć Owner uprawnienia w odpowiednim zakresie (subskrypcji lub grupy zasobów). Jeśli potrzebujesz pomocy dotyczącej przypisywania ról, dowiedz się, jak przypisywać role platformy Azure przy użyciu Azure Portal.
Użyj następujących poleceń lub Azure Portal, aby udzielić tożsamości zarządzanej aplikacji funkcji dostępu do magazynów App Configuration. Użyj następujących ról:
App Configuration Data ReaderPrzypisz rolę w magazynie App Configuration podstawowym.App Configuration Data OwnerPrzypisz rolę w magazynie pomocniczym App Configuration.
functionPrincipalId=$(az functionapp identity show --name $functionAppName --resource-group $resourceGroupName --query principalId --output tsv)
primaryAppConfigId=$(az appconfig show -n $primaryAppConfigName --query id --output tsv)
secondaryAppConfigId=$(az appconfig show -n $secondaryAppConfigName --query id --output tsv)
az role assignment create \
--role "App Configuration Data Reader" \
--assignee $functionPrincipalId \
--scope $primaryAppConfigId
az role assignment create \
--role "App Configuration Data Owner" \
--assignee $functionPrincipalId \
--scope $secondaryAppConfigId
Użyj następującego polecenia lub Azure Portal, aby udzielić tożsamości zarządzanej aplikacji funkcji dostępu do kolejki. Storage Queue Data Contributor Przypisz rolę w kolejce.
az role assignment create \
--role "Storage Queue Data Contributor" \
--assignee $functionPrincipalId \
--scope $queueId
Wyzwalanie zdarzenia App Configuration
Aby sprawdzić, czy wszystko działa, można utworzyć, zaktualizować lub usunąć klucz-wartość z magazynu podstawowego. Ta zmiana powinna zostać automatycznie wyświetlona w magazynie pomocniczym kilka sekund po wyzwoleniu czasomierza Azure Functions.
az appconfig kv set --name $primaryAppConfigName --key Foo --value Bar --yes
Zdarzenie zostało wyzwolone. W ciągu kilku minut usługa Event Grid wyśle powiadomienie o zdarzeniu do kolejki. Po następnym zaplanowanym uruchomieniu funkcji wyświetl ustawienia konfiguracji w magazynie pomocniczym, aby sprawdzić, czy zawiera zaktualizowaną wartość klucza z magazynu podstawowego.
Uwaga
Funkcję można wyzwolić ręcznie podczas testowania i rozwiązywania problemów bez oczekiwania na zaplanowany wyzwalacz czasomierza.
Po upewnieniu się, że funkcja kopii zapasowej została uruchomiona pomyślnie, widać, że klucz jest teraz obecny w magazynie pomocniczym.
az appconfig kv show --name $secondaryAppConfigName --key Foo
{
"contentType": null,
"etag": "eVgJugUUuopXnbCxg0dB63PDEJY",
"key": "Foo",
"label": null,
"lastModified": "2020-04-27T23:25:08+00:00",
"locked": false,
"tags": {},
"value": "Bar"
}
Rozwiązywanie problemów
Jeśli nowe ustawienie nie jest widoczne w magazynie pomocniczym:
- Upewnij się, że funkcja kopii zapasowej została wyzwolona po utworzeniu ustawienia w magazynie podstawowym.
- Istnieje możliwość, że usługa Event Grid nie może wysłać powiadomienia o zdarzeniu do kolejki w czasie. Sprawdź, czy kolejka nadal zawiera powiadomienie o zdarzeniu z magazynu podstawowego. Jeśli tak, ponownie wyzwól funkcję tworzenia kopii zapasowej.
- Sprawdź dzienniki Azure Functions pod kątem błędów lub ostrzeżeń.
- Użyj Azure Portal, aby upewnić się, że aplikacja funkcji platformy Azure zawiera poprawne wartości ustawień aplikacji, które Azure Functions próbuje odczytać.
- Możesz również skonfigurować monitorowanie i alerty dla Azure Functions przy użyciu usługi aplikacja systemu Azure Insights.
Czyszczenie zasobów
Jeśli planujesz kontynuować pracę z tą App Configuration i subskrypcją zdarzeń, nie usuwaj zasobów utworzonych w tym artykule. Jeśli nie planujesz kontynuowania pracy, użyj następującego polecenia, aby usunąć zasoby utworzone w tym artykule.
az group delete --name $resourceGroupName
Następne kroki
Teraz, gdy wiesz już, jak skonfigurować automatyczną kopię zapasową kluczy-wartości, dowiedz się więcej o tym, jak zwiększyć odporność geograficzną aplikacji:
