Udostępnij za pośrednictwem


Włączanie zewnętrznej walidacji na potrzeby orkiestracji obciążeń

Weryfikacja zewnętrzna umożliwia zweryfikowanie szablonu rozwiązania przy użyciu usługi zewnętrznej, takiej jak funkcja platformy Azure lub element webhook. Zewnętrzna usługa walidacji odbiera zdarzenia z usługi orkiestracji obciążenia i może wykonywać niestandardową logikę walidacji.

W tym artykule opisano sposób konfigurowania subskrypcji usługi Event Grid na potrzeby orkiestracji obciążeń oraz sposobu tworzenia i publikowania szablonu rozwiązania z włączoną zewnętrzną walidacją.

Wymagania wstępne

Subskrypcja usługi Event Grid na potrzeby orkiestracji obciążeń

Azure Event Grid to w pełni zarządzana, inteligentna usługa routingu zdarzeń, która umożliwia niezawodne dostarczanie zdarzeń na dużą skalę. Ułatwia ona programowanie reaktywne, umożliwiając aplikacjom reagowanie na zdarzenia niemal w czasie rzeczywistym, zmniejszając potrzebę ciągłego sondowania i umożliwiając luźno powiązane architektury.

Możesz utworzyć subskrypcję usługi Event Grid, aby otrzymywać powiadomienia z usługi aranżacji obciążenia. Subskrypcja jest używana do weryfikacji zewnętrznego rozwiązania orkiestracji pracy.

Usługa Event Grid działa jako inicjator, łącząc różne składniki systemu. Działa jako most między wydawcami zdarzeń a subskrybentami, co pozwala im komunikować się bez ścisłego łączenia. Na przykład po jednej stronie masz usługę orkiestracji obciążenia, a po drugiej stronie masz wtyczkę klienta. Usługa orkiestracji obciążenia działa jako wydawca zdarzeń, podczas gdy wtyczka klienta pełni rolę subskrybenta, który odbiera i przetwarza te zdarzenia.

Usługa Event Grid obsługuje modele oparte na zdarzeniach przez kierowanie zdarzeń z różnych źródeł, takich jak usługi platformy Azure, aplikacje niestandardowe lub mechanizmy obsługujące zdarzenia, takie jak Azure Functions, Logic Apps, Event Hubs lub niestandardowe webhooki. Aby uzyskać więcej informacji, zobacz Omówienie usługi Azure Event Grid.

Ważne

Subskrypcje usługi Event Grid są skojarzone z jednym typem tematu (produktem) naraz. Jeśli masz już subskrypcję usługi Event Grid dla innego typu tematu, musisz utworzyć nową subskrypcję na potrzeby aranżacji obciążeń.

Rejestrowanie usługi Event Grid

Ponieważ obecnie natywne funkcje Event Grid nie mogą uzyskać uprawnień usługi Service-to-Service (S2S) z powodu izolacji federacyjnej usługi (SFI), należy wykonać następujące kroki raz dla każdego kontekstu.

az provider register --namespace Microsoft.EventGrid
    
providerAppId="4962773b-9cdb-44cf-a8bf-237846a00ab7" # App Id for Event Grid
providerOid=$(az ad sp show --id $providerAppId --query id -o tsv)
    
az role assignment create --assignee "$providerOid" \
    --role "Workload Orchestration IT Admin" \
    --scope "/subscriptions/$subId/resourceGroups/$rg/providers/Microsoft.Edge/contexts/$instanceName"

Tworzenie subskrypcji usługi Event Grid przy użyciu interfejsu wiersza polecenia platformy Azure

Aby utworzyć subskrypcję usługi Event Grid przy użyciu interfejsu wiersza polecenia platformy Azure, wykonaj następujące kroki:

Utwórz subskrypcję Event Grid dla swojej subskrypcji Azure i grupy zasobów.

az eventgrid event-subscription create --name <subscription-name> \
    --source-resource-id "/subscriptions/$subId/resourceGroups/$rg/providers/Microsoft.Edge/contexts/$instanceName" \
    --endpoint <function-app-endpoint> \
    --endpoint-type azurefunction 

Tworzenie subskrypcji usługi Event Grid przy użyciu witryny Azure Portal

Aby utworzyć subskrypcję usługi Event Grid przy użyciu witryny Azure Portal, wykonaj następujące kroki:

  1. Przejdź do witryny Azure Portal.
  2. W polu wyszukiwania wpisz Subskrypcje usługi Event Grid i wybierz ją z listy.
  3. Wybierz opcję + Subskrypcja wydarzenia.
  4. Na stronie Tworzenie subskrypcji zdarzeń wykonaj następujące kroki:
    1. Na karcie Podstawy w polu Typy tematów wybierz typ źródła zdarzeń, na którym chcesz subskrybować. W przypadku orkiestracji obciążeń wybierz pozycję Orkiestracja obciążeń (wersja zapoznawcza).

      Zrzut ekranu witryny Azure Portal przedstawiający sposób tworzenia subskrypcji usługi Event Grid na potrzeby orkiestracji obciążeń.

    2. Wybierz subskrypcję platformy Azure i grupę zasobów zawierającą kontekst aranżacji obciążenia.

    3. Wybierz zasób kontekstu w polu Zasób .

    4. W obszarze Typy zdarzeń wybierz typy zdarzeń, dla których chcesz otrzymywać powiadomienia.

    5. Wybierz typ punktu końcowego i punkt końcowy, który odbiera zdarzenia. Możesz na przykład wybrać funkcję platformy Azure jako typ punktu końcowego, a SolutionValidator to nazwa funkcji, która odbiera zdarzenia z usługi Event Grid.

    6. Kliknij pozycję Utwórz , aby utworzyć subskrypcję usługi Event Grid.

Aby uzyskać więcej informacji, zobacz Subskrypcja usługi Event Grid za pośrednictwem portalu i dostarczania usługi Event Grid.

Zapewnianie dostępu do aranżacji obciążeń

Jeśli używasz aplikacji funkcjonalnej jako punktu końcowego dla subskrypcji Event Grid, musisz przypisać rolę Zewnętrznego Walidatora Rozwiązania Orkiestracji Obciążenia do zarządzanej tożsamości aplikacji funkcjonalnej. Ta rola umożliwia aplikacji funkcji weryfikowanie szablonu rozwiązania i wysyłanie zdarzeń z powrotem do usługi aranżacji obciążenia.

  1. Uruchom następujące polecenie, aby uzyskać identyfikator obiektu tożsamości zarządzanej aplikacji funkcjonalnej. Zastąp <functionAppName> ciąg nazwą aplikacji funkcji.

    az functionapp identity show \
        --name "<functionAppName>" \
        --resource-group "$rg"
    
  2. Skopiuj element principalId z danych wyjściowych, czyli identyfikator obiektu zarządzanej tożsamości aplikacji funkcyjnej.

    functionAppMSIObjectId="<principalId>"
    
  3. Przypisz rolę zewnętrznego modułu sprawdzania poprawności rozwiązania orkiestracji obciążeń do tożsamości zarządzanej aplikacji funkcji. Aby uzyskać więcej informacji, zobacz Przypisywanie ról platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

    az role assignment create \
        --assignee $functionAppMSIObjectId \
        --role "Workload Orchestration Solution External Validator" \
        --scope "/subscriptions/$subId/resourceGroups/$rg"
    

Tworzenie szablonu rozwiązania z włączoną zewnętrzną walidacją

Podczas tworzenia szablonu rozwiązania można włączyć zewnętrzną walidację, ustawiając --enable-external-validation parametr na true. Dzięki temu można zweryfikować szablon rozwiązania przy użyciu usługi zewnętrznej, takiej jak funkcja platformy Azure lub element webhook. Zewnętrzna usługa walidacji odbiera zdarzenia z usługi orkiestracji obciążenia i może wykonywać niestandardową logikę walidacji.

Na przykład następujące polecenie tworzy szablon rozwiązania z włączoną zewnętrzną walidacją.

az workload-orchestration solution-template create \
    --solution-template-name $appName1 \
    --resource-group $rg \
    --location $l \
    --capabilities $appCapList1 \
    --description $desc \
    --config-template-file $appConfig \
    --specification "@specs.json" \
    --version $appVersion \
    --enable-ext-validation "true"

Uwaga / Notatka

Po utworzeniu wersji szablonu rozwiązania z flagą walidacji zewnętrznej ('true' lub 'false'), flaga jest przechowywana na poziomie szablonu rozwiązania. W związku z tym wszystkie wersje rozwiązań — nowe i istniejące — dziedziczą to samo ustawienie weryfikacji zewnętrznej. W związku z tym nie można mieć wielu wersji w ramach tego samego szablonu rozwiązania z różnymi konfiguracjami weryfikacji zewnętrznej.

Aby uzyskać więcej informacji na temat szablonów rozwiązań i publikowania rozwiązania, zobacz Szybki start: tworzenie podstawowego rozwiązania bez typowych konfiguracji.

Publikowanie i weryfikowanie rozwiązania

  1. Podczas publikowania wersji rozwiązania polecenie publikowania wyzwala proces weryfikacji zewnętrznej. Usługa zarządzania obciążeniem wysyła zdarzenie do subskrypcji Event Grid, która wywołuje zewnętrzną usługę weryfikacji. Zewnętrzna usługa walidacji może następnie wykonać niestandardową logikę walidacji i wysłać odpowiedź z powrotem do usługi aranżacji obciążenia.

    az workload-orchestration target publish \
      --solution-version-id /subscriptions/$subId/resourceGroups/$rg/providers/private.edge/targets/$childName/solutions/$appName1/versions/1.0.0 \
      --resource-group "$rg" \
      --target-name "$childName"
    
  2. Ustaw solutionVersionId i externalValidationId jako zmienne, które otrzymujesz w ramach odpowiedzi publikowania.

    solutionVersionId="<solutionVersionId>"
    externalValidationId="<externalValidationId>"
    

Usługa Event Grid używa subskrypcji zdarzeń do określenia ostatecznego punktu dostarczania i stosuje niezbędne filtrowanie, takie jak dopasowanie tematu wydarzenia, aby upewnić się, że przekazywane są tylko odpowiednie zdarzenia.

Monitorowanie stanu walidacji za pomocą portalu aranżacji obciążenia

Po opublikowaniu rozwiązanie powinno natychmiast przejść do stanu Publikuj w toku w portalu aranżacji obciążenia, co oznacza, że dane zostały pomyślnie wypchnięte do usługi Event Grid w celu weryfikacji zewnętrznej.

  • Jeśli rozwiązanie jest w stanie Gotowe do wdrożenia , walidacja zakończyła się pomyślnie.

  • Jeśli rozwiązanie jest w stanie Niepowodzenie publikowania , walidacja nie powiodła się z powodu niektórych błędów. Na karcie Konfigurowanie portalu aranżacji obciążenia przejdź do karty Opublikowane rozwiązania i kliknij alert dla rozwiązania, aby wyświetlić szczegóły błędu.

Sprawdzanie stanu wersji rozwiązania za pośrednictwem interfejsu wiersza polecenia

Stan wersji rozwiązania można sprawdzić przy użyciu interfejsu wiersza polecenia. Stan wersji rozwiązania jest przechowywany w properties.state polu obiektu wersji rozwiązania.

Status to gotowy do wdrożenia

Jeśli stan zmieni się z PendingExternalValidation na ReadyToDeploy, oznacza to, że weryfikacja zewnętrzna zakończyła się pomyślnie, a rozwiązanie jest gotowe do wdrożenia. Możesz kontynuować instalację rozwiązania.

Przejdź solutionVersion do nowej wersji utworzonej w poprzednim kroku.

subId="<subscription-id>"
solutionVersion="<new-solution-version>"
solutionName="<solution-template-name>"

az workload-orchestration target install --resource-group "$rg" --target-name "$childName" --solution-version-id /subscriptions/$subId/resourceGroups/$rg/providers/private.edge/targets/$childName/solutions/$solutionName$/versions/$solutionVersion

Stan to ExternalValidationFailed

Jeśli stan zmieni się z PendingExternalValidation na ExternalValidationFailed, oznacza to, że weryfikacja zewnętrzna nie powiodła się z powodu niektórych nieprawidłowych konfiguracji i nie można wdrożyć rozwiązania. Aby rozwiązać ten problem, należy utworzyć nową wersję/poprawkę szablonu rozwiązania z prawidłowymi konfiguracjami.

Status oczekuje na zewnętrzną walidację

Jeśli stan pozostanie w PendingExternalValidation stanie, możliwe, że stan nie będzie kontynuowany z powodu błędu w aplikacji funkcji. Aby rozwiązać ten problem, możesz ręcznie zaktualizować stan wersji rozwiązania na Valid lub Invalid za pomocą poniższego polecenia interfejsu wiersza polecenia.

  1. W odpowiedzi GET sprawdź stan w właściwości 'state'

    az rest --method GET --url "$solutionVersionId?api-version=2025-01-01-preview"
    
  2. Aby ustawić konfiguracje wersji rozwiązania jako prawidłowe:

    1. Zaktualizuj stan wersji rozwiązania do Valid, używając następującego polecenia:

      az workload-orchestration target update-external-validation-status \
          --resource-group $rg \
          --target-name $childName \
          --external-validation-id $externalValidationId \
          --solution-version-id $solutionVersionId \
          --validation-status "Valid"
      
    2. W odpowiedzi na polecenie wyświetlany jest obiekt wersji rozwiązania, gdzie stan zmieniany jest na ReadyToDeploy.

    3. Kontynuuj instalację.

  3. Aby oznaczyć konfiguracje wersji rozwiązania jako nieprawidłowe:

    1. Zaktualizuj stan wersji rozwiązania do Invalid, używając następującego polecenia:

      az workload-orchestration target update-external-validation-status \
       --resource-group $rg \
       --target-name $childName \
       --external-validation-id $externalValidationId \
       --solution-version-id $solutionVersionId \
       --validation-status "Invalid" \
       --error-details "@error.json"
      
    2. W odpowiedzi polecenia wyświetlany jest obiekt wersji rozwiązania, gdzie stan zmienia się na ExternalValidationFailed.

    3. Błędy wymienione w plikuerror.json są przechowywane w polu w properties.errorDetails obiekcie wersji rozwiązania odpowiedzi. Błędy są widoczne w portalu aranżacji obciążeń.

    4. Ponieważ jest to stan terminalu, nie można kontynuować instalacji, ponieważ w wersji rozwiązania występują nieprawidłowe konfiguracje. Aby kontynuować instalację, musisz utworzyć nową wersję/poprawkę z prawidłowymi konfiguracjami.