Pubblica un evento in Cloud Pub/Sub utilizzando l'SDK ABAP per Google Cloud

1. Introduzione

In questo codelab abbiamo elencato i passaggi per pubblicare un evento nell'API Google Cloud Pub/Sub utilizzando l'SDK ABAP per Google Cloud.

In questo codelab vengono utilizzati i seguenti servizi Google Cloud:

  • Pub/Sub
  • Cloud Shell

Cosa creerai

Scoprirai quanto segue:

  • Abilitare Pub/Sub in un progetto Google Cloud.
  • Creare un argomento Pub/Sub.
  • Pubblicare messaggi.

2. Prima di iniziare

6757b2fb50ddcc2d.png

  • Esegui i seguenti comandi per autenticarti per il tuo account e impostare il progetto predefinito su abap-sdk-poc. La zona us-west4-b viene utilizzata come esempio. Se necessario, modifica il progetto e la zona nei comandi seguenti in base alle tue preferenze.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

3. Panoramica

L'ambito di questo codelab include i seguenti componenti di un servizio Pub/Sub:

  • Publisher (chiamato anche produttore): crea messaggi e li invia (pubblica) al servizio di messaggistica su un argomento specificato.
  • Messaggio: i dati che vengono trasferiti tramite il servizio di messaggistica.
  • Argomento: un'entità denominata che rappresenta un feed di messaggi.

4f5676da8922467f.png

4. Configurare il servizio Pub/Sub

  1. Per creare un account di servizio con il ruolo richiesto, esegui il seguente comando nel terminale Cloud Shell:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. Per attivare l'API Pub/Sub nel tuo account di servizio (abap-sdk-poc), esegui il seguente comando nel terminale Cloud Shell:
gcloud services enable pubsub.googleapis.com
  1. Concedi il ruolo IAM pubsub.topics.create all'account di servizio per poter creare un argomento. Esegui il comando seguente nel terminale Cloud Shell:
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. Concedi il ruolo IAM pubsub.topics.publish all'account di servizio per poter pubblicare un messaggio nell'argomento. Esegui il comando seguente nel terminale Cloud Shell:
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. Per verificare che i ruoli siano stati aggiunti, vai alla pagina IAM. L'account di servizio che hai creato dovrebbe essere elencato insieme ai ruoli che gli sono stati assegnati.

5. Configura la chiave client

Per mantenere la configurazione nella tabella /GOOG/CLIENT_KEY, svolgi i seguenti passaggi:

  1. In SAP GUI, inserisci il codice transazione SPRO.
  2. Fai clic su SAP Reference IMG (Immagine di riferimento SAP).
  3. Fai clic su SDK ABAP per Google Cloud > Impostazioni di base > Configura chiave client.
  4. Fai clic su Nuove voci.
  5. Inserisci i valori per i seguenti campi:

Campo

Descrizione

Nome della chiave Google Cloud

PUBSUB_DEMO

Nome dell'account di servizio Google Cloud

abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com

Ambito Google Cloud

https://www.googleapis.com/auth/cloud-platform

Identificatore del progetto Google Cloud

abap-sdk-poc

Classe di autorizzazione

/GOOG/CL_AUTH_GOOGLE

Lascia vuoti gli altri campi

ec6b6f94bfa85533.png

6. Crea un argomento

Puoi creare un argomento utilizzando il metodo CREATE_TOPICS dello stub dell'API /GOOG/CL_PUBSUB_V1. Firma del metodo:

d40fde108ccf2853.png

  1. In SAP GUI, inserisci il codice transazione SE38.
  2. Crea un report denominato ZPUBSUB_DEMO.
  3. Nella finestra popup visualizzata, fornisci i dettagli come mostrato di seguito e fai clic su Salva.

f9cbdabb6ca96fc4.png

  1. Nel popup successivo, seleziona Oggetto locale o fornisci un nome del pacchetto, a seconda dei casi.
  2. Nell'editor ABAP, aggiungi il seguente codice:
" 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. Salva ed esegui il report.
  2. Esegui il report (F8).

Al termine dell'esecuzione, dovresti vedere l'output del report come mostrato di seguito:

16aa8a4c59d776d9.png

7. Pubblica il messaggio nell'argomento

Ora che l'argomento è pronto, possiamo concentrarci sull'invio dei dati. Come passaggio successivo, scopriamo come pubblicare messaggi su questo argomento. I messaggi vengono pubblicati nell'argomento utilizzando il metodo PUBLISH_TOPICS dello stub dell'API /GOOG/CL_PUBSUB_V1.

Firma del metodo:

459fe21ce68bd811.png

  1. Nella GUI di SAP, inserisci il codice transazione SE38.
  2. Crea un report denominato ZPUBSUB_DEMO_PUBLISH.
  3. Nella finestra popup visualizzata, fornisci i dettagli come mostrato di seguito e fai clic su Salva.

9a180c4e9a1e139.png

  1. Nel popup successivo, seleziona Oggetto locale o fornisci un nome del pacchetto, a seconda dei casi.
  2. Nell'editor ABAP, aggiungi il seguente codice:
" 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. Salva ed esegui il report.
  2. Esegui il report (F8).

Al termine dell'esecuzione, dovresti vedere l'output del report come mostrato di seguito:

384125235efc104.png

8. Complimenti

Complimenti! Hai pubblicato correttamente un messaggio nell'API Pub/Sub della piattaforma Google Cloud utilizzando l'SDK ABAP per Google Cloud.

Ora puoi procedere con il codelab di seguito per continuare il tuo percorso di apprendimento sull'utilizzo dell'SDK ABAP per accedere a vari servizi Google Cloud.

  • Ricevere un evento da Cloud Pub/Sub
  • Carica un file nel bucket Cloud Storage con il chunking
  • Chiama Vertex AI test-bison da ABAP
  • . . .

9. Esegui la pulizia

Se non vuoi continuare con i codelab aggiuntivi relativi all'SDK ABAP per Google Cloud, procedi con la pulizia.

Eliminare il progetto

  • Elimina il progetto Google Cloud:
gcloud projects delete abap-sdk-poc

Eliminare singole risorse

  1. Elimina l'istanza di calcolo:
gcloud compute instances delete abap-trial-docker
  1. Elimina le regole firewall:
gcloud compute firewall-rules delete sapmachine
  1. Elimina l'account di servizio:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com