Kierowanie zdarzeń w chmurze do elementów webhook za pomocą usługi Azure Event Grid na platformie Kubernetes

W tym przewodniku Szybki start utworzysz temat w usłudze Event Grid na platformie Kubernetes, utworzysz subskrypcję tematu, a następnie wyślesz przykładowe zdarzenie do tematu w celu przetestowania scenariusza.

Ważne

Usługa Event Grid na platformie Kubernetes z usługą Azure Arc jest obecnie dostępna w publicznej wersji zapoznawczej. Ta wersja zapoznawcza nie jest objęta umową dotyczącą poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

Wymagania wstępne

  1. Połączenie klastra Kubernetes do usługi Azure Arc.
  2. Zainstaluj rozszerzenie usługi Event Grid w klastrze Kubernetes. To rozszerzenie wdraża usługę Event Grid w klastrze Kubernetes.

Tworzenie lokalizacji niestandardowej

Jako rozszerzenie lokalizacji platformy Azure lokalizacja niestandardowa umożliwia używanie klastra Kubernetes z włączoną usługą Azure Arc jako lokalizacji docelowej do wdrażania zasobów, takich jak tematy usługi Event Grid. Lokalizacja niestandardowa reprezentuje przestrzeń nazw w klastrze i jest miejscem wdrażania tematów i subskrypcji zdarzeń. W tej sekcji utworzysz lokalizację niestandardową.

  1. Zadeklaruj następujące zmienne, aby przechowywać wartości klastra, grupy zasobów i niestandardowych nazw lokalizacji usługi Azure Arc. Skopiuj te instrukcje do edytora, zastąp wartości, a następnie skopiuj/wklej do okna powłoki bash.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Pobierz identyfikator zasobu klastra połączonego z usługą Azure Arc. Przed uruchomieniem polecenia zaktualizuj wartości nazwy klastra usługi Azure Arc i parametrów grupy zasobów.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Pobierz identyfikator zasobu rozszerzenia usługi Event Grid. W tym kroku przyjęto założenie, że nazwa nadana dla rozszerzenia usługi Event Grid to eventgrid-ext. Przed uruchomieniem polecenia zaktualizuj nazwy klastra i grup zasobów usługi Azure Arc.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Utwórz lokalizację niestandardową przy użyciu dwóch wartości z poprzedniego kroku. Przed uruchomieniem polecenia zaktualizuj nazwy lokalizacji niestandardowej i grupy zasobów.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Pobierz identyfikator zasobu lokalizacji niestandardowej. Przed uruchomieniem polecenia zaktualizuj nazwę lokalizacji niestandardowej.

    customlocationid=$(az customlocation show -n $customlocationname -g $resourcegroupname --query id -o tsv)    
    

    Aby uzyskać więcej informacji na temat tworzenia lokalizacji niestandardowych, zobacz Tworzenie lokalizacji niestandardowych i zarządzanie nimi na platformie Kubernetes z obsługą usługi Azure Arc.

Tworzenie tematu

W tej sekcji utworzysz temat w lokalizacji niestandardowej utworzonej w poprzednim kroku. Przed uruchomieniem polecenia zaktualizuj nazwy grup zasobów i tematu usługi Event Grid. Zaktualizuj lokalizację, jeśli używasz lokalizacji innej niż Wschodnie stany USA.

  1. Zadeklaruj zmienną do przechowywania nazwy tematu.

    topicname="<TOPIC NAME>"
    
  2. Uruchom następujące polecenie, aby utworzyć temat.

    az eventgrid topic create -g $resourcegroupname --name $topicname --kind azurearc --extended-location-name $customlocationid --extended-location-type customlocation --input-schema CloudEventSchemaV1_0 --location $region    
    

    Aby uzyskać więcej informacji na temat polecenia interfejsu wiersza polecenia, zobacz az eventgrid topic create.

Tworzenie punktu końcowego komunikatów

Przed utworzeniem subskrypcji dla tematu niestandardowego utwórz punkt końcowy dla komunikatu o zdarzeniu. Zazwyczaj w punkcie końcowym akcje są wykonywane na podstawie danych zdarzenia. Aby uprościć ten przewodnik Szybki start, wdrożysz wstępnie utworzoną aplikację internetową, która wyświetla komunikaty o zdarzeniach. Wdrożone rozwiązanie zawiera plan usługi App Service, aplikację internetową usługi App Service i kod źródłowy z repozytorium GitHub.

  1. Na stronie artykułu wybierz pozycję Wdróż na platformie Azure , aby wdrożyć rozwiązanie w ramach subskrypcji. W witrynie Azure Portal podaj wartości parametrów.

    Button to deploy the Resource Manager template to Azure.

  2. Wdrożenie może potrwać kilka minut. Po pomyślnym wdrożeniu należy wyświetlić aplikację sieci Web i upewnić się, że jest uruchomiona. W przeglądarce sieci Web przejdź do: https://<your-site-name>.azurewebsites.net

    Jeśli wdrożenie zakończy się niepowodzeniem, sprawdź komunikat o błędzie. Może to być spowodowane tym, że nazwa witryny sieci Web jest już zajęta. Ponownie wdróż szablon i wybierz inną nazwę witryny.

  3. Zobaczysz witrynę, w której nie opublikowano jeszcze żadnych zdarzeń.

    View new site

Tworzenie subskrypcji

Subskrybenci mogą rejestrować się w przypadku zdarzeń opublikowanych w temacie. Aby otrzymać dowolne zdarzenie, musisz utworzyć subskrypcję usługi Event Grid, aby uzyskać interesujący cię temat. Subskrypcja zdarzeń definiuje miejsce docelowe, do którego są wysyłane te zdarzenia. Aby dowiedzieć się więcej o wszystkich obsługiwanych miejscach docelowych lub programach obsługi, zobacz Procedury obsługi zdarzeń.

Aby utworzyć subskrypcję zdarzeń z miejscem docelowym elementu webhook (punkt końcowy HTTPS), wprowadź nazwę subskrypcji zdarzeń, zaktualizuj nazwę witryny internetowej i uruchom następujące polecenie.

topicid=$(az eventgrid topic show --name $topicname --resource-group $resourcegroupname --query id -o tsv)
az eventgrid event-subscription create --name <EVENT SUBSCRIPTION NAME> --source-resource-id $topicid --endpoint https://<SITE NAME>.azurewebsites.net/api/updates

Aby uzyskać więcej informacji na temat polecenia interfejsu wiersza polecenia, zobacz az eventgrid event-subscription create.

Wysyłanie zdarzeń do tematu

  1. Uruchom następujące polecenie, aby uzyskać punkt końcowy tematu: Po skopiowaniu i wklejeniu polecenia zaktualizuj nazwę tematu i nazwę grupy zasobów przed uruchomieniem polecenia. Przykładowe zdarzenia są publikowane w tym punkcie końcowym tematu.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. Uruchom następujące polecenie, aby uzyskać klucz dla tematu niestandardowego: po skopiowaniu i wklejeniu polecenia zaktualizuj nazwę tematu i nazwę grupy zasobów przed uruchomieniem polecenia. Jest to klucz podstawowy tematu. Aby uzyskać ten klucz z witryny Azure Portal, przejdź do karty Klucze dostępu na stronie Temat usługi Event Grid. Aby można było opublikować zdarzenie w temacie niestandardowym, potrzebny jest klucz dostępu.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Uruchom następujące polecenie Curl , aby opublikować zdarzenie. Przed uruchomieniem polecenia określ adres URL punktu końcowego i klucz z kroku 1 i 2.

    curl  -k -X POST -H "Content-Type: application/cloudevents-batch+json" -H "aeg-sas-key: <KEY_FROM_STEP_2>" -g <ENDPOINT_URL_FROM_STEP_1> \
    -d  '[{ 
          "specversion": "1.0",
          "type" : "orderCreated",
          "source": "myCompanyName/us/webCommerceChannel/myOnlineCommerceSiteBrandName",
          "id" : "eventId-n",
          "time" : "2020-12-25T20:54:07+00:00",
          "subject" : "account/acct-123224/order/o-123456",
          "dataSchema" : "1.0",
          "data" : {
             "orderId" : "123",
             "orderType" : "PO",
             "reference" : "https://www.myCompanyName.com/orders/123"
          }
    }]'
    

    Jeśli adres URL punktu końcowego tematu z kroku 1 jest prywatnym adresem IP, na przykład w przypadku, gdy typ usługi brokera usługi usługi Event Grid to ClusterIP, można wykonać polecenie Curl z poziomu innego zasobnika w klastrze, aby mieć dostęp do tego adresu IP. Możesz na przykład wykonać następujące czynności:

    1. Utwórz plik manifestu z następującą konfiguracją. Możesz chcieć dostosować dnsPolicy je zgodnie z potrzebami. Aby uzyskać więcej informacji, zobacz DNS dla usług i zasobników.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. Utwórz zasobnik.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Sprawdź, czy zasobnik jest uruchomiony.

          kubectl get pod test-pod
      
    4. Uruchamianie sesji powłoki z kontenera

          kubectl exec --stdin --tty test-pod -- /bin/bash
      

    W tym momencie masz sesję powłoki z uruchomionego kontenera w klastrze, z którego można wykonać polecenie Curl opisane we wcześniejszym kroku.

    Uwaga

    Aby dowiedzieć się, jak wysyłać zdarzenia w chmurze przy użyciu języków programowania, zobacz następujące przykłady:

Weryfikowanie w podglądzie usługi Event Grid

Zdarzenie zostało wyzwolone, a usługa Event Grid wysłała komunikat do punktu końcowego skonfigurowanego podczas subskrybowania. Wyświetl aplikację sieci Web, aby wyświetlić właśnie wysłane zdarzenie.

View received event in Event Grid Viewer

Następne kroki

Odwiedź następujące artykuły: