1. Introduzione
In questo codelab sono elencati i passaggi per pubblicare un evento nell'API Google Cloud Pub/Sub utilizzando l'ABAP SDK for Google Cloud.
In questo codelab vengono utilizzati i seguenti servizi Google Cloud:
- Pub/Sub
- Cloud Shell
Cosa creerai
Imparerai 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 fare riferimento al codelab Installazione della versione di prova di ABAP su Google Cloud Platform.
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud. Nella console Google Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:
- Esegui questi 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 seguenti comandi 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 riguarda i seguenti componenti di un servizio Pub/Sub:
- Publisher (chiamato anche producer): crea messaggi e li invia (pubblica) al servizio di messaggistica su un argomento specificato.
- Messaggio: i dati che si spostano attraverso il servizio di messaggistica.
- Argomento: un'entità denominata che rappresenta un feed di messaggi.
4. Configurare il servizio Pub/Sub
- Per creare un service account con il ruolo richiesto, esegui questo comando nel terminale Cloud Shell:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- Per abilitare l'API Pub/Sub al tuo service account (
abap-sdk-poc
), esegui il comando seguente nel terminale Cloud Shell:
gcloud services enable pubsub.googleapis.com
- Concedi il ruolo IAM pubsub.topics.create al service account per poter creare un argomento. Esegui questo comando 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 al service account per poter pubblicare un messaggio nell'argomento. Esegui questo comando 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. Il service account 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
, segui questi passaggi:
- Nella GUI SAP, inserisci il codice transazione SPRO.
- Fai clic su SAP Reference IMG.
- Fai clic su ABAP SDK for 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 progetto Google Cloud | abap-sdk-poc |
Authorization Class | /GOOG/CL_AUTH_GOOGLE |
Lascia vuoti gli altri campi
6. Crea un argomento
Crea un argomento utilizzando il metodo CREATE_TOPICS dello stub API /GOOG/CL_PUBSUB_V1. Firma del metodo:
- Nella GUI SAP, inserisci il codice transazione SE38.
- Crea un report con il nome ZPUBSUB_DEMO.
- Nel popup che si apre, fornisci i dettagli come mostrato di seguito e fai clic su Salva.
- Nel popup successivo, seleziona Oggetto locale o fornisci un nome di 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 e attiva il report.
- Esegui il report (F8).
Se l'esecuzione va a buon fine, dovresti visualizzare l'output del report come mostrato di seguito:
7. Pubblica un messaggio nell'argomento
Con l'argomento pronto, ora possiamo concentrarci sull'invio dei dati. Come passaggio successivo, scopriamo come pubblicare messaggi in questo argomento. I messaggi vengono pubblicati nell'argomento utilizzando il metodo PUBLISH_TOPICS
dello stub API /GOOG/CL_PUBSUB_V1
.
Firma del metodo:
- Nella GUI di SAP, inserisci il codice di transazione SE38.
- Crea un report con il nome ZPUBSUB_DEMO_PUBLISH.
- Nel popup che si apre, fornisci i dettagli come mostrato di seguito e fai clic su Salva.
- Nel popup successivo, seleziona Oggetto locale o fornisci un nome di 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 e attiva il report.
- Esegui il report (F8).
Se l'esecuzione va a buon fine, dovresti visualizzare l'output del report come mostrato di seguito:
8. Complimenti
Complimenti! Hai pubblicato correttamente un messaggio nell'API Pub/Sub di Google Cloud utilizzando ABAP SDK for Google Cloud.
Ora puoi procedere con il codelab riportato 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 in un bucket Cloud Storage con il chunking
- Chiamare 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 il account di servizio:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com