Schnellstart: Senden von Ereignissen aus der privaten Containerregistrierung an Event Grid

Azure Event Grid ist ein vollständig verwalteter Dienst für das Ereignisrouting, der eine einheitliche Ereignisnutzung mithilfe eines Veröffentlichen/Abonnieren-Modells bereitstellt. In dieser Schnellstartanleitung verwenden Sie die Azure CLI, um eine Containerregistrierung zu erstellen, Registrierungsereignisse zu abonnieren und anschließend eine Beispielwebanwendung für den Empfang der Ereignisse bereitzustellen. Abschließend lösen Sie für das Containerimage push- und delete-Ereignisse aus und lassen sich die Ereignisnutzlast in der Beispielanwendung anzeigen.

Nachdem Sie die Schritte in diesem Artikel ausgeführt haben, werden Ereignisse, die von Ihrer Containerregistrierung an Event Grid gesendet werden, in der Beispielwebanwendung angezeigt.

Web browser rendering the sample web application with three received events

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

Voraussetzungen

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

  • Die Azure CLI-Befehle in diesem Artikel sind für die Ausführung in einer Bash-Shell formatiert. Wenn Sie eine andere Shell wie PowerShell oder die Eingabeaufforderung verwenden, müssen Sie möglicherweise Zeilenfortsetzungszeichen oder Variablenzuweisungszeilen entsprechend anpassen. In diesem Artikel werden Variablen verwendet, damit die Befehle später nur geringfügig angepasst werden müssen.

Erstellen einer Ressourcengruppe

Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Sie Azure-Ressourcen bereitstellen und verwalten. Durch den Befehl az group create wird eine Ressourcengruppe mit dem Namen myResourceGroup in der Region eastus erstellt. Wenn Sie einen anderen Namen für Ihre Ressourcengruppe verwenden möchten, legen Sie RESOURCE_GROUP_NAME auf einen anderen Wert fest.

RESOURCE_GROUP_NAME=myResourceGroup

az group create --name $RESOURCE_GROUP_NAME --location eastus

Erstellen einer Containerregistrierung

Stellen Sie anschließend mit den unten aufgeführten Befehlen eine Containerregistrierung in der Ressourcengruppe bereit. Legen Sie zunächst ACR_NAME auf einen Namen für Ihre Registrierung fest, bevor Sie den Befehl az acr create ausführen. Der Name muss innerhalb von Azure eindeutig sein und darf 5 bis 50 alphanumerische Zeichen enthalten.

ACR_NAME=<acrName>

az acr create --resource-group $RESOURCE_GROUP_NAME --name $ACR_NAME --sku Basic

Nach der Erstellung der Registrierung sieht die Azure CLI-Ausgabe in etwa wie folgt aus:

{
  "adminUserEnabled": false,
  "creationDate": "2018-08-16T20:02:46.569509+00:00",
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
  "location": "eastus",
  "loginServer": "myregistry.azurecr.io",
  "name": "myregistry",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

Erstellen eines Ereignisendpunkts

In diesem Abschnitt wird beschrieben, wie Sie mit einer Resource Manager-Vorlage aus einem GitHub-Repository eine vorab erstellte Beispiel-Web-Anwendung in Azure App Service bereitstellen. In einem anderen Abschnitt wird erläutert, wie Sie die Event Grid-Ereignisse Ihrer Registrierung abonnieren und die App als den Endpunkt festlegen, an den Ereignisse gesendet werden.

Legen Sie zum Bereitstellen der Beispiel-App SITE_NAME auf einen eindeutigen Namen für Ihre Web-App fest, und führen Sie die unten aufgeführten Befehle aus. Der Websitename muss innerhalb von Azure eindeutig sein, da er Bestandteil des vollqualifizierten Domänennamens (FQDN) der Web-App ist. In einem Abschnitt weiter unten navigieren Sie in einem Webbrowser zum FQDN der App und lassen sich dort die Registrierungsereignisse anzeigen.

SITE_NAME=<your-site-name>

az deployment group create \
    --resource-group $RESOURCE_GROUP_NAME \
    --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
    --parameters siteName=$SITE_NAME hostingPlanName=$SITE_NAME-plan

Öffnen Sie nach der erfolgreichen Bereitstellung (dieser Vorgang kann einige Minuten dauern) einen Browser, und navigieren Sie zu Ihrer Web-App, um sicherzustellen, dass diese ausgeführt wird:

http://<your-site-name>.azurewebsites.net

Die Beispiel-App sollte nun gerendert werden, und es sollten keine Ereignismeldungen angezeigt werden:

Web browser showing sample web app with no events displayed

Aktivieren des Event Grid-Ressourcenanbieters

  1. Wenn Sie zuvor in Ihrem Azure-Abonnement noch nicht Event Grid verwendet haben, sollten Sie den Event Grid-Ressourcenanbieter registrieren. Führen Sie den folgenden Befehl aus, um den Anbieter zu registrieren:

    az provider register --namespace Microsoft.EventGrid
    
  2. Es kann einen Moment dauern, bis die Registrierung abgeschlossen ist. Führen Sie den folgenden Befehl aus, um den Status zu überprüfen:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Wenn registrationStateRegistered ist, können Sie den Vorgang fortsetzen.

Abonnieren von Registrierungsereignissen

In Event Grid abonnieren Sie ein Thema, um festzulegen, welche Ereignisse Sie nachverfolgen möchten und wohin diese gesendet werden sollen. Durch den folgenden Befehl vom Typ az eventgrid event-subscription create wird die erstellte Containerregistrierung abonniert und die Web-App-URL als Endpunkt festgelegt, an die Ereignisse gesendet werden sollen. Die Umgebungsvariablen, die Sie in den vorherigen Abschnitten angegeben haben, werden hier wiederverwendet, sodass keine Änderungen erforderlich sind.

ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
APP_ENDPOINT=https://$SITE_NAME.azurewebsites.net/api/updates

az eventgrid event-subscription create \
    --name event-sub-acr \
    --source-resource-id $ACR_REGISTRY_ID \
    --endpoint $APP_ENDPOINT

Nach Abschluss des Abonniervorgangs sollte die Ausgabe der folgenden ähneln:

{
  "destination": {
    "endpointBaseUrl": "https://eventgridviewer.azurewebsites.net/api/updates",
    "endpointType": "WebHook",
    "endpointUrl": null
  },
  "filter": {
    "includedEventTypes": [
      "All"
    ],
    "isSubjectCaseSensitive": null,
    "subjectBeginsWith": "",
    "subjectEndsWith": ""
  },
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry/providers/Microsoft.EventGrid/eventSubscriptions/event-sub-acr",
  "labels": null,
  "name": "event-sub-acr",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "topic": "/subscriptions/<Subscription ID>/resourceGroups/myresourcegroup/providers/microsoft.containerregistry/registries/myregistry",
  "type": "Microsoft.EventGrid/eventSubscriptions"
}

Auslösen von Registrierungsereignissen

Da die Beispiel-App ausgeführt wird und Sie die Registrierung in Event Grid abonniert haben, können Sie nun Ereignisse generieren. In diesem Abschnitt wird beschrieben, wie Sie mithilfe von ACR Tasks ein Containerimage erstellen und in die Registrierung pushen. ACR Tasks ist ein Feature von Azure Container Registry, mit dem Sie Containerimages in der Cloud erstellen können, ohne dass dafür die Docker-Engine auf Ihrem lokalen Computer installiert sein muss.

Erstellen und Übermitteln des Images mithilfe von Push

Führen Sie den unten genannten Azure CLI-Befehl aus, um ein Containerimage mithilfe der Inhalte eines GitHub-Repositorys zu erstellen. Standardmäßig pusht ACR Tasks automatisch das erfolgreich erstellte Image in Ihre Registrierung, die dann das ImagePushed-Ereignis generiert.

Hinweis

Die im folgenden Beispiel verwendete Dockerfile-Datei hängt von einem öffentlichen Basiscontainerimage aus Docker Hub ab. Um die Zuverlässigkeit bei der Verwendung öffentlicher Inhalte zu verbessern, importieren und verwalten Sie das Image in einer privaten Azure-Containerregistrierung, und aktualisieren Sie Ihr Dockerfile so, dass es Ihr privat verwaltetes Basisimage verwendet. Weitere Informationen zum Arbeiten mit öffentlichen Images.

az acr build --registry $ACR_NAME --image myimage:v1 -f Dockerfile https://github.com/Azure-Samples/acr-build-helloworld-node.git#main

Wenn ACR Tasks den Erstellungs- und den anschließenden Push-Vorgang für Ihr Image ausführt, sollte die Ausgabe in etwa wie im folgenden Beispiel aussehen. Die folgende Beispielausgabe wurde aus Gründen der Übersichtlichkeit gekürzt.

Sending build context to ACR...
Queued a build with build ID: aa2
Waiting for build agent...
2018/08/16 22:19:38 Using acb_vol_27a2afa6-27dc-4ae4-9e52-6d6c8b7455b2 as the home volume
2018/08/16 22:19:38 Setting up Docker configuration...
2018/08/16 22:19:39 Successfully set up Docker configuration
2018/08/16 22:19:39 Logging in to registry: myregistry.azurecr.io
2018/08/16 22:19:55 Successfully logged in
Sending build context to Docker daemon  94.72kB
Step 1/5 : FROM node:9-alpine
...

Führen Sie den folgenden Befehl zum Anzeigen des Tags im Repository myimage aus, um sicherzustellen, dass sich das erstellte Image in Ihrer Registrierung befindet:

az acr repository show-tags --name $ACR_NAME --repository myimage

Das „v1“-Tag des erstellten Images sollte ähnlich wie in der folgenden Ausgabe dargestellt werden:

[
  "v1"
]

Löschen des Images

Generieren Sie nun ein Ereignis vom Typ ImageDeleted, indem Sie das Image mit dem Befehl az acr repository delete löschen:

az acr repository delete --name $ACR_NAME --image myimage:v1

Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen und die Aufforderung enthalten, das Löschen des Manifests und der zugehörigen Images zu bestätigen:

This operation will delete the manifest 'sha256:f15fa9d0a69081ba93eee308b0e475a54fac9c682196721e294b2bc20ab23a1b' and all the following images: 'myimage:v1'.
Are you sure you want to continue? (y/n): 

Anzeigen von Registrierungsereignissen

Sie haben das Image mithilfe von Push an Ihre Registrierung übertragen und es anschließend gelöscht. Navigieren Sie nun zur Ihrer Viewer-Web-App für Event Grid. In dieser sollten die Ereignisse ImageDeleted und ImagePushed angezeigt werden. Möglicherweise werden auch für den Abonniervorgang Validierungsereignisse angezeigt, die durch Ausführen des Befehls im Abschnitt Abonnieren von Registrierungsereignissen generiert wurden.

Auf dem folgenden Screenshot ist die Beispiel-App mit drei Ereignissen zu sehen. Der Abschnitt des ImageDeleted-Ereignisses wurde erweitert, damit die zugehörigen Details angezeigt werden.

Web browser showing the sample app with ImagePushed and ImageDeleted events

Herzlichen Glückwunsch! Wenn die Ereignisse ImagePushed und ImageDeleted angezeigt werden, sendet Ihre Registrierung Ereignisse an Event Grid. Dieser Dienst leitet die Ereignisse dann weiter an Ihren Web-App-Endpunkt.

Bereinigen von Ressourcen

Wenn Sie die mit dieser Schnellstartanleitung erstellten Ressourcen nicht mehr benötigen, können Sie diese mit dem unten aufgeführten Azure CLI-Befehl löschen. Wenn Sie eine Ressourcengruppe löschen, werden alle darin enthaltenen Ressourcen dauerhaft gelöscht.

WARNUNG: Dieser Vorgang kann nicht rückgängig gemacht werden. Stellen Sie sicher, dass Sie die Ressourcen in der Gruppe nicht mehr benötigen, bevor Sie den Befehl ausführen.

az group delete --name $RESOURCE_GROUP_NAME

Event Grid-Ereignisschema

Den Schemaverweis für Ereignismeldungen in Azure Container Registry finden Sie in der Event Grid-Dokumentation:

Azure Event Grid-Ereignisschema für Container Registry

Nächste Schritte

Sie haben mit diesem Schnellstart eine Containerregistrierung bereitgestellt, ein Image mit ACR Tasks erstellt und anschließend gelöscht und Registrierungsereignisse von Event Grid in einer Beispielanwendung verwendet. Im nächsten ACR Tasks-Tutorial erfahren Sie mehr über das Erstellen von Containerimages in der Cloud und über automatisierte Builds während der Aktualisierung des Basisimages: