Dirigera molnhändelser till Webhooks med Azure Event Grid på Kubernetes

I den här snabbstarten skapar du ett ämne i Event Grid på Kubernetes, skapar en prenumeration för ämnet och skickar sedan en exempelhändelse till ämnet för att testa scenariot.

Viktigt!

Event Grid på Kubernetes med Azure Arc är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Förutsättningar

  1. Anslut ditt Kubernetes-kluster till Azure Arc.
  2. Installera Event Grid-tillägget i Kubernetes-klustret. Det här tillägget distribuerar Event Grid till ett Kubernetes-kluster.

Skapa en anpassad plats

Som ett Azure-platstillägg kan du använda ditt Azure Arc-aktiverade Kubernetes-kluster som målplats för att distribuera resurser som Event Grid-ämnen. En anpassad plats representerar ett namnområde i klustret och det är den plats där ämnen och händelseprenumerationer distribueras. I det här avsnittet skapar du en anpassad plats.

  1. Deklarera följande variabler för att lagra värden för Azure Arc-klustret, resursgruppen och anpassade platsnamn. Kopiera dessa instruktioner till en redigerare, ersätt värdena och kopiera/klistra sedan in i bash-fönstret.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Hämta resurs-ID:t för det Azure Arc-anslutna klustret. Uppdatera värden för Azure Arc-klusternamn och resursgruppsparametrar innan du kör kommandot.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Hämta resurs-ID:t för Event Grid-tillägget. Det här steget förutsätter att namnet du gav för Event Grid-tillägget är eventgrid-ext. Uppdatera Namn på Azure Arc-kluster och resursgrupper innan du kör kommandot.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Skapa en anpassad plats med hjälp av de två värdena från föregående steg. Uppdatera namn på anpassad plats och resursgrupp innan du kör kommandot.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Hämta resurs-ID för den anpassade platsen. Uppdatera det anpassade platsnamnet innan du kör kommandot.

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

    Mer information om hur du skapar anpassade platser finns i Skapa och hantera anpassade platser på Azure Arc-aktiverade Kubernetes.

Skapa ett ämne

I det här avsnittet skapar du ett ämne på den anpassade plats som du skapade i föregående steg. Uppdatera resursgruppen och Event Grid-ämnesnamnen innan du kör kommandot. Uppdatera platsen om du använder en annan plats än USA, östra.

  1. Deklarera en variabel som innehåller ämnesnamnet.

    topicname="<TOPIC NAME>"
    
  2. Kör följande kommando för att skapa ett ämne.

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

    Mer information om CLI-kommandot finns i az eventgrid topic create.

Skapa en slutpunkt för meddelanden

Innan du skapar en prenumeration för det anpassade ämnet skapar du en slutpunkt för händelsemeddelandet. Slutpunkten utför vanligtvis åtgärder baserat på informationen om händelsen. För att förenkla den här snabbstarten distribuerar du en fördefinierad webbapp som visar händelsemeddelandena. Den distribuerade lösningen innehåller en App Service-plan,en webbapp för App Service och källkod från GitHub.

  1. På artikelsidan väljer du Distribuera till Azure för att distribuera lösningen till din prenumeration. Ange parametervärdena i Azure Portal.

    Button to deploy the Resource Manager template to Azure.

  2. Det kan ta några minuter att slutföra distributionen. Efter distributionen har slutförts kan du visa webbappen för att kontrollera att den körs. I en webbläsare navigerar du till: https://<your-site-name>.azurewebsites.net

    Om distributionen misslyckas kontrollerar du felmeddelandet. Det kan bero på att webbplatsnamnet redan har tagits. Distribuera mallen igen och välj ett annat namn för webbplatsen.

  3. Du ser webbplatsen men det har inte publicerats händelser till den än.

    View new site

Skapa en prenumeration

Prenumeranter kan registrera sig för händelser som publicerats i ett ämne. Om du vill ta emot en händelse måste du skapa en Event Grid-prenumeration för ett ämne av intresse. En händelseprenumeration definierar det mål som dessa händelser skickas till. Information om alla mål eller hanterare som stöds finns i Händelsehanterare.

Om du vill skapa en händelseprenumeration med ett WebHook-mål (HTTPS-slutpunkt) anger du ett namn för händelseprenumerationen, uppdaterar namnet på webbplatsen och kör följande kommando.

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

Mer information om CLI-kommandot finns i az eventgrid event-subscription create.

Skicka händelser till ämnet

  1. Kör följande kommando för att hämta slutpunkten för ämnet: När du har kopierat och klistrat in kommandot uppdaterar du ämnesnamnet och resursgruppens namn innan du kör kommandot. Du publicerar exempelhändelser till den här ämnesslutpunkten.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. Kör följande kommando för att hämta nyckeln för det anpassade ämnet: När du har kopierat och klistrat in kommandot uppdaterar du ämnesnamnetoch resursgruppens namn innan du kör kommandot. Det är den primära nyckeln i ämnet. Om du vill hämta den här nyckeln från Azure-portalen växlar du till fliken Åtkomstnycklarsidan Event Grid-ämne . För att kunna publicera en händelse i ett anpassat ämne behöver du åtkomstnyckeln.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Kör följande Curl-kommando för att publicera händelsen. Ange slutpunkts-URL:en och nyckeln från steg 1 och 2 innan du kör kommandot.

    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"
          }
    }]'
    

    Om ämnets slutpunkts-URL från steg 1 är en privat IP-adress, till exempel när Event Grid-koordinatorns tjänsttyp är ClusterIP, kan du köra Curl inifrån en annan podd i klustret för att få åtkomst till den IP-adressen. Du kan till exempel utföra följande steg:

    1. Skapa en manifestfil med följande konfiguration. Du kanske vill justera dnsPolicy efter dina behov. Mer information finns i DNS för tjänster och poddar.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. Skapa podden.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Kontrollera att podden körs.

          kubectl get pod test-pod
      
    4. Starta en shell-session från containern

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

    Nu har du en shell-session från en container som körs i klustret där du kan köra Curl-kommandot som beskrivs i ett tidigare steg.

    Kommentar

    Information om hur du skickar molnhändelser med programmeringsspråk finns i följande exempel:

Verifiera i Loggboken

Du har utlöst händelsen och Event Grid skickade meddelandet till den slutpunkt som du konfigurerade när du prenumererade. Visa din webbapp om du vill se händelsen som du har skickat.

View received event in Event Grid Viewer

Nästa steg

Mer information finns i följande artiklar:

  • Händelsehanterare och mål – innehåller information om alla händelsehanterare och mål som Event Grid på Kubernetes stöder.
  • Händelsefiltrering – innehåller information om filtrering av händelser i händelseprenumerationer.