Ereignis mit dem ABAP SDK for Google Cloud in Cloud Pub/Sub veröffentlichen

1. Einführung

In diesem Codelab haben wir die Schritte zum Veröffentlichen eines Ereignisses in der Google Cloud Pub/Sub API mit dem ABAP SDK for Google Cloud aufgeführt.

In diesem Codelab werden die folgenden Google Cloud-Dienste verwendet:

  • Pub/Sub
  • Cloud Shell

Aufgaben

Sie erfahren Folgendes:

  • Pub/Sub in einem Google Cloud-Projekt aktivieren
  • Pub/Sub-Thema erstellen
  • Nachrichten veröffentlichen.

2. Hinweis

6757b2fb50ddcc2d.png

  • 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 die Zone us-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

Dieses Codelab umfasst die folgenden Komponenten eines Pub/Sub-Dienstes:

  • Publisher (auch als Datenersteller bezeichnet): erstellt Nachrichten und sendet (veröffentlicht) sie an den Messaging-Dienst zu einem bestimmten Thema.
  • Nachricht: die Daten, die durch den Messaging-Dienst geleitet werden.
  • Thema: eine benannte Entität, die für einen Feed von Nachrichten steht.

4f5676da8922467f.png

4. Pub/Sub-Dienst einrichten

  1. Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus, um ein Dienstkonto mit der erforderlichen Rolle zu erstellen:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus, um die Pub/Sub API für Ihr Dienstkonto (abap-sdk-poc) zu aktivieren:
gcloud services enable pubsub.googleapis.com
  1. Weisen Sie dem Dienstkonto die IAM-Rolle pubsub.topics.create zu, damit ein Thema erstellt werden 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'
  1. Weisen Sie dem Dienstkonto die IAM-Rolle pubsub.topics.publish zu, damit eine Nachricht im Thema veröffentlicht werden 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'
  1. 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 ihm zugewiesenen Rollen aufgeführt sein.

5. Clientschlüssel konfigurieren

Führen Sie die folgenden Schritte aus, um die Konfiguration in der Tabelle /GOOG/CLIENT_KEY zu verwalten:

  1. Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
  2. Klicken Sie auf SAP-Referenz-IMG.
  3. Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren.
  4. Klicken Sie auf Neue Einträge.
  5. 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.

ec6b6f94bfa85533.png

6. Thema erstellen

Sie erstellen ein Thema mit der Methode CREATE_TOPICS des API-Stubs /GOOG/CL_PUBSUB_V1. Signatur der Methode:

d40fde108ccf2853.png

  1. Geben Sie in der SAP-GUI den Transaktionscode SE38 ein.
  2. Erstellen Sie einen Bericht mit dem Namen ZPUBSUB_DEMO.
  3. Geben Sie im Pop-up-Fenster, das sich öffnet, die Details wie unten gezeigt ein und klicken Sie auf Speichern.

f9cbdabb6ca96fc4.png

  1. Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.
  2. Fügen Sie im ABAP-Editor den folgenden Code hinzu:
" 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.
  1. Speichern und aktivieren Sie den Bericht.
  2. Führen Sie den Bericht aus (F8).

Bei erfolgreicher Ausführung sollte die Berichtsausgabe so aussehen:

16aa8a4c59d776d9.png

7. Nachricht zum Thema veröffentlichen

Jetzt, da das Thema bereit ist, können wir uns darauf konzentrieren, Daten zu senden. Als Nächstes sehen wir uns an, wie Nachrichten zu diesem Thema veröffentlicht werden. Nachrichten werden mit der Methode PUBLISH_TOPICS des API-Stubs /GOOG/CL_PUBSUB_V1 im Thema veröffentlicht.

Signatur der Methode:

459fe21ce68bd811.png

  1. Geben Sie in der SAP-GUI den Transaktionscode SE38 ein.
  2. Erstellen Sie einen Bericht mit dem Namen ZPUBSUB_DEMO_PUBLISH.
  3. Geben Sie im Pop-up-Fenster, das sich öffnet, die Details wie unten gezeigt ein und klicken Sie auf Speichern.

9a180c4e9a1e139.png

  1. Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.
  2. Fügen Sie im ABAP-Editor den folgenden Code hinzu:
" 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.
  1. Speichern und aktivieren Sie den Bericht.
  2. Führen Sie den Bericht aus (F8).

Bei erfolgreicher Ausführung sollte die Berichtsausgabe so aussehen:

384125235efc104.png

8. Glückwunsch

Glückwunsch! Sie haben erfolgreich eine Nachricht an die Pub/Sub API von Google Cloud Platform mit dem ABAP SDK for Google Cloud gesendet.

Sie können jetzt mit dem folgenden Codelab fortfahren, um mehr über die Verwendung des ABAP SDK für den Zugriff auf verschiedene Google Cloud-Dienste zu erfahren.

  • Ereignis von Cloud Pub/Sub empfangen
  • Datei mit Chunking in einen Cloud Storage-Bucket hochladen
  • Vertex AI test-bison über ABAP aufrufen
  • . . .

9. Bereinigen

Wenn Sie nicht mit den zusätzlichen Codelabs zum ABAP SDK for Google Cloud fortfahren möchten, fahren Sie mit dem Bereinigen fort.

Projekt löschen

  • Google Cloud-Projekt löschen:
gcloud projects delete abap-sdk-poc

Einzelne Ressourcen löschen

  1. Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
  1. Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
  1. Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com