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
- Hai installato ABAP SDK for Google Cloud sul tuo sistema. Per configurare un nuovo sistema, puoi consultare il codelab Install ABAP Trial on Google Cloud Platform.
- Utilizza Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud. In Cloud Console, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:
- Esegui i seguenti comandi per autenticarti per il tuo account e impostare il progetto predefinito su
abap-sdk-poc
. La zonaus-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.
4. Configurare il servizio Pub/Sub
- 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"
- 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
- 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'
- 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'
- 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:
- In SAP GUI, inserisci il codice transazione SPRO.
- Fai clic su SAP Reference IMG (Immagine di riferimento SAP).
- Fai clic su SDK ABAP per Google Cloud > Impostazioni di base > Configura chiave client.
- Fai clic su Nuove voci.
- 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
6. Crea un argomento
Puoi creare un argomento utilizzando il metodo CREATE_TOPICS dello stub dell'API /GOOG/CL_PUBSUB_V1. Firma del metodo:
- In SAP GUI, inserisci il codice transazione SE38.
- Crea un report denominato ZPUBSUB_DEMO.
- Nella finestra popup visualizzata, fornisci i dettagli come mostrato di seguito e fai clic su Salva.
- Nel popup successivo, seleziona Oggetto locale o fornisci un nome del pacchetto, a seconda dei casi.
- 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.
- Salva ed esegui il report.
- Esegui il report (F8).
Al termine dell'esecuzione, dovresti vedere l'output del report come mostrato di seguito:
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:
- Nella GUI di SAP, inserisci il codice transazione SE38.
- Crea un report denominato ZPUBSUB_DEMO_PUBLISH.
- Nella finestra popup visualizzata, fornisci i dettagli come mostrato di seguito e fai clic su Salva.
- Nel popup successivo, seleziona Oggetto locale o fornisci un nome del pacchetto, a seconda dei casi.
- 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.
- Salva ed esegui il report.
- Esegui il report (F8).
Al termine dell'esecuzione, dovresti vedere l'output del report come mostrato di seguito:
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
- Elimina l'istanza di calcolo:
gcloud compute instances delete abap-trial-docker
- Elimina le regole firewall:
gcloud compute firewall-rules delete sapmachine
- Elimina l'account di servizio:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com