Object Storage-Ereignisse abonnieren
In diesem Lernprogramm wird das Abonnieren von Object Storage-Ereignissen über die IBM Cloud® Code Engine-Befehlszeilenschnittstelle erläutert.
In verteilten Umgebungen ist es oftmals erwünscht, dass Anwendungen oder Jobs auf Nachrichten (Ereignisse) reagieren, die von anderen, zumeist als Ereignisproduzenten bezeichneten Komponenten generiert werden. Mit Code Engine können Ihre Anwendungen und Jobs relevante Ereignisse empfangen, indem Ereignisproduzenten abonniert werden. Ereignisinformationen werden für Anwendungen als POST-HTTP-Anforderungen und für Jobs als Umgebungsvariablen empfangen.
Vorbereitende Schritte
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt und arbeiten Sie damit.
Alle Code Engine-Benutzer müssen über ein nutzungsabhängiges Konto verfügen. Für Tutorien können Kosten anfallen. Verwenden Sie den Cost Estimator, um einen Kostenvoranschlag auf der Grundlage Ihrer voraussichtlichen Nutzung zu erstellen. Weitere Informationen finden Sie unter „ Code Engine-Preise “.
Object Storage-Bucket und -Region bestimmen
Der Object Storage-Ereignisproduzent generiert Ereignisse auf Grundlage von Operationen für Objekte in IBM Cloud Object Storage-Buckets.
-
Installieren Sie die Befehlszeilenschnittstelle des Object Storage-Plug-ins.
ibmcloud plugin install cloud-object-storage -
Erstellen Sie eine Object Storage-Ressourceninstanz. Erstellen Sie beispielsweise eine Object Storage-Ressource namens
mycloud-object-storage, die den Lite-Serviceplan von IBM Cloud verwendet.ibmcloud resource service-instance-create mycloud-object-storage cloud-object-storage lite global -
Zeigen Sie die Details der Object Storage-Ressourceninstanz an, die Sie erstellt haben. Verwenden Sie die Details, um den Cloudressourcennamen (CRN) aus Ihrer Object Storage-Instanz abzurufen. Der Cloudressourcenname gibt an, welche Object Storage-Instanz verwendet werden soll. Der Cloudressourcenname ist der Wert des Feldes
IDin der Ausgabe für den Befehlibmcloud resource service-instance COS_INSTANCE_NAME.ibmcloud resource service-instance mycloud-object-storageBeispielausgabe
Name: mycloud-object-storage ID: crn:v1:bluemix:public:cloud-object-storage:global:a/ab9d57f699655f028880abcd2ccdb524:910b727b-abcd-4a73-abcd-77c68bfeabcd:: GUID: 910b727b-abcd-4a73-abcd-77c68bfeabcd Location: global Service Name: cloud-object-storage Service Plan Name: lite Resource Group Name: Default State: active Type: service_instance Sub Type: Created at: 2020-10-14T19:09:22Z Created by: user@us.ibm.com Updated at: 2020-10-14T19:09:22Z [...]Wenn Sie Ihren Object Storage-Instanznamen nicht kennen, führen Sie den Befehl
ibmcloud resource service-instances --service-name cloud-object-storageaus, um eine Liste mit Object Storage-Instanzen anzuzeigen.Weitere Informationen zu Object Storage-Instanzen finden Sie unter Einführung in IBM Cloud Object Storage.
-
Konfigurieren Sie Ihren Object Storage-CRN, den Sie im vorherigen Schritt ermittelt haben, um eine Object Storage-Instanz anzugeben, mit der gearbeitet werden soll. Achten Sie darauf, die vollständige ID ab
crn:zu kopieren. In diesem Beispiel wird mit der Option--forcedie Verwendung des angegebenen Cloudressourcennamens durch die Konfiguration erzwungen; dies kann hilfreich sein, wenn mehrere Object Storage-Instanzen vorhanden sind.ibmcloud cos config crn --crn CRN --forceBeispielausgabe
Saving new Service Instance ID... OK Successfully stored your service instance ID. -
Bestimmen Sie ein Bucket, das abonniert werden soll. Um eine Liste der Buckets anzuzeigen, die Ihrer Object Storage-Instanz zugeordnet sind, gehen Sie wie folgt vor:
ibmcloud cos bucketsGeben Sie zum Erstellen eines Buckets Folgendes ein:
ibmcloud cos bucket-create -bucket BUCKET_NAME -
Geben Sie den Standort und den Plan für das Object Storage-Bucket an. Verwenden Sie zum Beispiel das Bucket
mybucket.ibmcloud cos bucket-location-get --bucket mybucketBeispielausgabe
Details about bucket mybucket: Region: us-south Class: Standard
Ihr Object Storage-Bucket muss ein regionales Bucket sein, das sich in derselben Region wie Ihr Code Engine-Projekt befindet.
Code Engine die Rolle eines Benachrichtigungsmanagers zuweisen
Bevor Sie eine -Object StorageSubskription erstellen können, müssen Sie die Rolle 'Benachrichtigungsmanager' einem Code Engine-Projekt zuordnen. Als Benachrichtigungsmanager kann Code Engine Benachrichtigungen für ein Object Storage-Bucket anzeigen, ändern und löschen.
Nur Kontoadministratoren können die Rolle "Benachrichtigungsmanager" zuweisen.
-
Ermitteln Sie das Code Engine-Projekt, das Sie verwenden möchten. Mit dem Befehl
ibmcloud ce project listkönnen Sie eine Liste von Projekten anzeigen. Mit dem Befehlibmcloud ce project selectkönnen Sie Ihr Projekt als aktuellen Kontext auswählen. Geben Sie beispielsweise zur Auswahl eines Projekts namensmyprojectFolgendes ein:ibmcloud ce project select -n myproject -
Weisen Sie mit dem Befehl
ibmcloud iam authorization-policy-createdie Rolle 'Benachrichtigungsmanager' zu.Wenn Sie beispielsweise einem Projekt namens
myprojectfür eine Object Storage-Instanz namensmycosinstancedie Rolle 'Benachrichtigungsservice' zuweisen möchten, geben Sie Folgendes ein:ibmcloud iam authorization-policy-create codeengine cloud-object-storage "Notifications Manager" --source-service-instance-name PROJECT --target-service-instance-name COS-INSTANCENach dem Zuweisen der Rolle eines Benachrichtigungsmanagers zu Ihrem Projekt können Sie Object Storage-Abonnements für alle regionalen Buckets in der Object Storage-Instanz erstellen, die sich in derselben Region wie Ihr Projekt befinden.
In der folgenden Tabelle sind die Optionen zusammengefasst, die mit dem Befehl
iam authorization-policy-createin diesem Beispiel verwendet werden. Weitere Informationen zum Befehl und den zugehörigen Optionen finden Sie im Abschnitt über den Befehlibmcloud iam authorization-policy-create.iam authorization-policy-create command components Befehlsoption Beschreibung codeengineDer Quellenservice, der für den Zugriff autorisiert werden kann. cloud-object-storageDer Zielservice, für den der Quellenservice die Zugriffsberechtigung erhalten kann. Notifications ManagerDie Rollen, die dem Quellenservice den Zugriff ermöglichen. source-service-instance-nameDer Name des codeengine-Projekts, für das Sie den Zugriff erteilen möchten.target-service-instance-nameDer Name der cloud-object-storage-Instanz, auf die zugegriffen werden soll. -
Überprüfen Sie, ob die Rolle 'Benachrichtigungsmanager' festgelegt wurde.
ibmcloud iam authorization-policiesBeispielausgabe
ID: abcd1234-a123-b456-bdd9-849e337c4460 Source service name: codeengine Source service instance: 1234abcd-b456-c789-a7c5-ef82e56fb24c Target service name: cloud-object-storage Target service instance: a1b2c3d4-cbad-567a-8cea-77c68bfe97c9 Roles: Notifications Manager
App (oder Job) erstellen
Während Ereignisse verwendet werden können, um Apps oder Jobs auszulösen, verwendet dieses Lernprogramm eine App.
Erstellen Sie eine Anwendung mit dem Namen cos-app mit dem Befehl ibmcloud ce app create, indem Sie ein Image verwenden, das
als cos-listen bezeichnet wird. Diese App protokolliert jedes Ereignis bei dessen Eingang. Dieses Bild wurde auf der Grundlage von „ cos-listen.go “ erstellt, das im Repository „Samples for IBM Cloud Code Engine “(GitHub ) verfügbar ist.
ibmcloud ce app create --name cos-app --image icr.io/codeengine/cos-listen
Führen Sie den Befehl ibmcloud ce application get --name cos-app aus, um sicherzustellen, dass die App den Bereitstatus (Ready) aufweist. Die Anwendung befindet sich im Bereitstatus, wenn die Statuszusammenfassung zeigt,
dass die Anwendung erfolgreich bereitgestellt wurde.
Weitere Informationen zu dieser App finden Sie unter IBM Cloud Object Storage Readme-Datei.
Subskription erstellen
Wenn die App bereit ist, können Sie ein Object Storage-Abonnement erstellen, damit Sie Object Storage-Ereignisse empfangen können. Verwenden Sie dazu den Befehl ibmcloud ce sub cos create.
Erstellen Sie beispielsweise ein Object Storage-Abonnement mit dem Namen cos-sub. Dieses Abonnement leitet Bucketoperationen jeden Typs aus dem Bucket mybucket an eine Anwendung namens cos-app weiter.
ibmcloud ce sub cos create --name cos-sub --destination cos-app --bucket mybucket --event-type all
Führen Sie den Befehl ibmcloud ce sub cos get -n cos-sub aus, um Informationen zu Ihrer Subskription zu finden.
Beispielausgabe
Der Befehl ibmcloud ce sub cos get gibt standardmäßig zwei Teile zurück. Der erste Teil enthält Informationen zum Object Storage-Abonnement,
wie den Namen des Abonnements, das Ziel, das Präfix, das Suffix und den Ereignistyp. Der zweite Teil enthält ressourcenbezogene Ereignisinformationen zu dem Object Storage-Abonnement, die zu Fehlerbehebungszwecken verwendet werden können.
Die Ereignisinformationen sind nach ihrem Auftreten standardmäßig 1 Stunde lang verfügbar.
Getting COS event subscription 'cos-sub'...
OK
Name: cos-sub
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 4m16s
Created: 2021-02-01T13:11:31-05:00
Destination: App:cos-app
Bucket: mybucket
EventType: all
Ready: true
Conditions:
Type OK Age Reason
CosConfigured true 38s
Ready true 38s
ReadyForEvents true 38s
SinkProvided true 38s
Events:
Type Reason Age Source Messages
Normal CosSourceReady 39s cossource-controller CosSource is ready
Der Befehl subscription cos create überprüft standardmäßig zunächst, ob die Zielanwendung vorhanden ist. Schlägt die Zielprüfung fehl, weil der App-Name, den Sie angegeben haben, in Ihrem Projekt nicht vorhanden
ist, gibt der Befehl subscription cos create einen Fehler zurück. Wenn Sie ein Abonnement erstellen möchten, ohne zuerst die Anwendung zu erstellen, verwenden Sie die Option --force. Bei Verwendung
der Option --force umgeht der Befehl die Zielprüfung. Beachten Sie, dass das Feld Ready des Abonnements den Wert false anzeigt, bis die Ziel-App erstellt wird. Anschließend wird das Abonnement automatisch
in den Status Ready: true versetzt.
Nach dem Erstellen des Abonnements und vor dem Melden von Ergebnissen durch den Befehl subscription cos create fragt der Befehl subscription cos create wiederholt den Status des Abonnements
ab, um dessen Bereitschaft zu überprüfen. Diese kontinuierliche Statusabfrage dauert standardmäßig 15 Sekunden, bevor das Zeitlimit überschritten wird. Wenn der Abonnementstatus als Ready:true zurückgegeben wird, meldet er Erfolg,
andernfalls meldet er einen Fehler. Sie können die Zeit ändern, die der Befehl subscription cos create wartet, bevor das Zeitlimit überschritten wird. Verwenden Sie dazu die Option --wait-timeout.
Sie können die Statusabfrage auch umgehen, indem Sie die Option --no-wait auf false setzen.
Weitere Informationen zu Headern und Hauptteilen finden Sie in Informationen zu HTTP-Headern und -Hauptteilen für Ereignisse.
Dabei ist zu beachten, dass sich Abonnements auf die Skalierung einer Anwendung auswirken können. Weitere Informationen finden Sie im Abschnitt Anwendungsskalierung konfigurieren.
Abonnement testen
-
Laden Sie eine
.txt-Datei in Ihr Bucket hoch. Mit dem Befehlibmcloud cos object-putkönnen Sie beispielsweise das Objektsample.txtmit dem Wertsamplefür--keyin ein Bucket hochladen.ibmcloud cos object-put --bucket mybucket --key sample --body sample.txt -
Zeigen Sie das verarbeitete Ereignis mit dem Befehl
ibmcloud ce app logsan.ibmcloud ce app logs --name cos-appBeispielausgabe
Dieser Befehl gibt Protokolldateien mit Informationen zu dem Ereignis zurück, das an Ihre Ziel-App weitergeleitet wurde. Aus der folgenden Ausgabe geht hervor, dass eine Schreiboperation (
Write) für das Objektsampleim Bucket namensmybucketausgeführt wurde.Body: {"bucket":"mybucket","endpoint":"","key":"sample","notification":{"bucket_name":"mybucket","content_type":"text/plain","event_type":"Object:Write","format":"2.0","object_length":"1960","object_name":"sample","request_id":"103dd6f7-dd7b-4f49-86db-c2ff4b678b0a","request_time":"2021-02-11T16:57:42.373Z"},"operation":"Object:Write"}
Object Storage-Abonnement aktualisieren
Da Sie jetzt wissen, dass Ihr Object Storage-Abonnement erfolgreich erstellt wurde und das Object Storage-Abonnement zur Verarbeitung von Ereignissen bereitsteht, können Sie das Object Storage-Abonnement mit dem Befehl ibmcloud ce sub cos update aktualisieren. Sie können Ihr Abonnement beispielsweise so ändern, dass es nur ausgeführt wird, wenn bestimmte Operationen für eine Untergruppe von Objekten im Bucket auftreten.
-
Aktualisieren Sie das Object Storage-Abonnement so, dass nur dann Ereignisse weitergeleitet werden, wenn
delete-Operationen für Dateien mit dem Namenspräfixtestausgeführt werden.ibmcloud ce sub cos update --name cos-sub --event-type delete --prefix test -
Führen Sie den Befehl
ibmcloud ce sub cos getaus, um Informationen zu Ihrem Abonnement abzurufen.ibmcloud ce sub cos get --name cos-subBeispielausgabe
Diese Ausgabe zeigt die aktualisierten Werte für
PrefixundEventType.Getting COS event subscription 'cos-sub'... OK Name: cos-sub ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 4m16s Created: 2021-02-01T13:11:31-05:00 Destination: App:cos-app Bucket: mybucket EventType: delete Prefix: test Ready: true Conditions: Type OK Age Reason CosConfigured true 24m Ready true 24m ReadyForEvents true 24m SinkProvided true 24m Events: Type Reason Age Source Messages Normal CosSourceReady 9s (x2 over 24m) cossource-controller CosSource is ready -
Löschen Sie ein Objekt mit dem Präfix
testaus Ihrem Bucket. Löschen Sie beispielsweise eine Datei mit dem Namen (bzw. Schlüssel)test2.txt. Zum Löschen eines Objekts aus Ihrem Bucket können Sie den Befehlibmcloud cos object-deleteoder die Object Storage-Konsole verwenden. -
Zeigen Sie das verarbeitete Ereignis mit dem Befehl
ibmcloud ce app logsan.ibmcloud ce app logs --name cos-appBeispielausgabe
Dieser Befehl gibt Protokolldateien mit Informationen zu dem Ereignis zurück, das an Ihre Ziel-App weitergeleitet wurde. Aus der folgenden Ausgabe geht hervor, dass eine Schreiboperation (
Delete) für das Objekt.txtim Bucket namensmybucketausgeführt wurde.Body: {"bucket":"mybucket","endpoint":"",""key":"test2.txt","notification":{"bucket_name":"mybucket","event_type":"Object:Delete","format":"2.0","object_length":"41","object_name":"test2.txt","request_id":"c1099857-f1f3-4d74-9ac4-8d374582f77d","request_time":"2021-09-15T15:22:01.205Z"},"operation":"Object:Delete"}
Lernprogramm zur Bereinigung für Object Storage
Sind Sie bereit, Ihr Object Storage-Abonnement und Ihre App zu löschen? Hierzu können Sie die Befehle ibmcloud ce app delete und ibmcloud ce sub cos delete verwenden.
Zum Entfernen des Abonnements lautet der Befehl wie folgt:
ibmcloud ce sub cos delete --name cos-sub
Zum Entfernen der Anwendung lautet der Befehl wie folgt:
ibmcloud ce app delete --name cos-app
Sollen das Object Storage-Bucket und die Serviceinstanz gelöscht werden? Mit dem Befehl ibmcloud cos bucket-delete können Sie Ihr Bucket entfernen. Zum Entfernen Ihrer Object Storage-Serviceinstanz verwenden Sie den Befehl ibmcloud resource service-instance-delete.