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.

Diagram przedstawiający architekturę kopii zapasowej magazynu 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

  • 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.KeyValueModified
  • Microsoft.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ład https://{primary_appconfig_name}.azconfig.io.
  • SecondaryStoreEndpoint: Punkt końcowy pomocniczego magazynu App Configuration. Może to być na przykład https://{secondary_appconfig_name}.azconfig.io.
  • StorageQueueUri: Identyfikator URI kolejki. Może to być na przykład https://{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 Reader Przypisz rolę w magazynie App Configuration podstawowym.
  • App Configuration Data Owner Przypisz 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: