1. Einführung
In diesem Codelab finden Sie eine Anleitung zum Veröffentlichen eines Ereignisses in der Google Cloud Pub/Sub API mit dem ABAP SDK for Google Cloud.
In diesem Codelab werden die folgenden Google Cloud-Dienste verwendet:
- Pub/Sub
- Cloud Shell
Aufgaben
Sie lernen Folgendes:
- Pub/Sub in einem Google Cloud-Projekt aktivieren
- Pub/Sub-Thema erstellen
- Nachrichten veröffentlichen
2. Hinweis
- Sie haben das ABAP SDK for Google Cloud auf Ihrem System installiert. Weitere Informationen zum Einrichten eines neuen Systems finden Sie im Codelab ABAP Trial auf der Google Cloud Platform installieren.
- Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird. Klicken Sie in der Cloud Console rechts oben auf Cloud Shell aktivieren:
- Führen Sie die folgenden Befehle aus, um sich für Ihr Konto zu authentifizieren und das Standardprojekt auf
abap-sdk-poc
festzulegen. Als Beispiel wird Zoneus-west4-b
verwendet. Ändern Sie bei Bedarf das Projekt und die Zone in den folgenden Befehlen entsprechend Ihren Anforderungen.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
3. Übersicht
In diesem Codelab werden die folgenden Komponenten eines Pub/Sub-Dienstes behandelt:
- Publisher (auch als Ersteller bezeichnet): Erstellt Nachrichten und sendet (veröffentlicht) sie an den Messaging-Dienst zu einem bestimmten Thema.
- Nachricht: die Daten, die über den Messaging-Dienst übertragen werden.
- Thema: eine benannte Entität, die für einen Feed von Nachrichten steht.
4. Pub/Sub-Dienst einrichten
- Führen Sie zum Erstellen eines Dienstkontos mit der erforderlichen Rolle den folgenden Befehl im Cloud Shell-Terminal aus:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- Wenn Sie die Pub/Sub API für Ihr Dienstkonto (
abap-sdk-poc
) aktivieren möchten, führen Sie im Cloud Shell-Terminal den folgenden Befehl aus:
gcloud services enable pubsub.googleapis.com
- Weisen Sie dem Dienstkonto die IAM-Rolle pubsub.topics.create zu, damit es ein Thema erstellen kann. Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.create'
- Weisen Sie dem Dienstkonto die IAM-Rolle pubsub.topics.publish zu, damit es eine Nachricht im Thema veröffentlichen kann. Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.publish'
- Rufen Sie die Seite IAM auf, um zu prüfen, ob die Rollen hinzugefügt wurden. Das von Ihnen erstellte Dienstkonto sollte zusammen mit den zugewiesenen Rollen aufgeführt sein.
5. Clientschlüssel konfigurieren
So pflegen Sie die Konfiguration in der Tabelle /GOOG/CLIENT_KEY
:
- Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
- Klicken Sie auf SAP-Referenz-IMG.
- Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren.
- Klicken Sie auf Neue Einträge.
- Geben Sie Werte für die folgenden Felder ein:
Feld | Beschreibung |
Google Cloud-Schlüsselname | PUBSUB_DEMO |
Name des Google Cloud-Dienstkontos | abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud-Bereich | https://www.googleapis.com/auth/cloud-platform |
Google Cloud-Projekt-ID | abap-sdk-poc |
Autorisierungsklasse | /GOOG/CL_AUTH_GOOGLE |
Lassen Sie die anderen Felder leer.
6. Thema erstellen
Sie erstellen ein Thema mit der Methode CREATE_TOPICS des API-Stubs /GOOG/CL_PUBSUB_V1. Signatur der Methode:
- Geben Sie in der SAP-GUI den Transaktionscode SE38 ein.
- Erstellen Sie einen Bericht mit dem Namen ZPUBSUB_DEMO.
- Geben Sie im Pop-up-Fenster die Details wie unten gezeigt ein und klicken Sie auf Speichern.
- Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.
- Fügen Sie im ABAP-Editor den folgenden Code ein:
" Data Declaration
DATA:
lo_client TYPE REF TO /goog/cl_pubsub_v1.
TRY.
" Open HTTP Connection
CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.
" Populate relevant parameters
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).
" Call API method pubsub.topics.create
lo_client->create_topics(
EXPORTING
iv_p_projects_id = lv_p_projects_id
iv_p_topics_id = lv_p_topics_id
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_client->is_success( lv_ret_code ) = abap_true.
DATA(lv_msg) = 'Topic ' && ':' && lv_p_topics_id && ' was created!'.
MESSAGE lv_msg TYPE 'I' .
ELSE.
MESSAGE lv_err_text TYPE 'E'.
ENDIF.
" Close HTTP Connection
lo_client->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
MESSAGE lo_exception->get_text( ) TYPE 'E'.
RETURN.
ENDTRY.
- Speichern und aktivieren Sie den Bericht.
- Führen Sie den Bericht aus (F8).
Nach erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt aussehen:
7. Nachricht zum Thema veröffentlichen
Da das Thema eingerichtet ist, können wir uns jetzt darauf konzentrieren, Daten zu senden. Im nächsten Schritt erfahren Sie, wie Sie Nachrichten zu diesem Thema veröffentlichen. Nachrichten werden mit der Methode PUBLISH_TOPICS
des API-Stubs /GOOG/CL_PUBSUB_V1
im Thema veröffentlicht.
Signatur der Methode:
- Geben Sie in der SAP-GUI den Transaktionscode SE38 ein.
- Erstellen Sie einen Bericht mit dem Namen ZPUBSUB_DEMO_PUBLISH.
- Geben Sie im Pop-up-Fenster die Details wie unten gezeigt ein und klicken Sie auf Speichern.
- Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.
- Fügen Sie im ABAP-Editor den folgenden Code ein:
" Data Declaration
DATA:
lo_client TYPE REF TO /goog/cl_pubsub_v1,
ls_message TYPE /goog/cl_pubsub_v1=>ty_025,
ls_input TYPE /goog/cl_pubsub_v1=>ty_023.
TRY.
" Open HTTP Connection
CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.
" Populate relevant parameters
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).
ls_message-data = cl_http_utility=>encode_base64( unencoded = ' This message was published to topic' ).
APPEND ls_message TO ls_input-messages.
" Call API method : pubsub.topics.publish
" This method publishes the message(encoded in base64 format to the topic )
lo_client->publish_topics(
EXPORTING
iv_p_projects_id = lv_p_projects_id
iv_p_topics_id = lv_p_topics_id
is_input = ls_input
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_client->is_success( lv_ret_code ) = abap_true.
DATA(lv_msg) = 'Message was published to topic ' && ': ' && lv_p_topics_id.
MESSAGE lv_msg TYPE 'I' DISPLAY LIKE 'S'.
ELSE.
MESSAGE lv_err_text TYPE 'E'.
ENDIF.
" Close HTTP Connection
lo_client->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
MESSAGE lv_err_text TYPE 'E'.
RETURN.
ENDTRY.
- Speichern und aktivieren Sie den Bericht.
- Führen Sie den Bericht aus (F8).
Nach erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt aussehen:
8. Glückwunsch
Glückwunsch! Sie haben mit dem ABAP SDK for Google Cloud eine Nachricht an die Pub/Sub API der Google Cloud Platform gesendet.
Sie können jetzt mit dem Codelab unten fortfahren, um mehr über die Verwendung des ABAP SDK zum Zugriff auf verschiedene Google Cloud-Dienste zu erfahren.
- Ereignis von Cloud Pub/Sub empfangen
- Datei mit Chunking in Cloud Storage-Bucket hochladen
- Vertex AI-Test-Bison aus ABAP aufrufen
- . . .
9. Bereinigen
Wenn Sie nicht mit den zusätzlichen Codelabs zum ABAP SDK for Google Cloud fortfahren möchten, fahren Sie mit der Bereinigung fort.
Projekt löschen
- So löschen Sie das Google Cloud-Projekt:
gcloud projects delete abap-sdk-poc
Einzelne Ressourcen löschen
- Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
- Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
- Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com