Publica un evento en Cloud Pub/Sub con el SDK de ABAP para Google Cloud

1. Introducción

En este codelab, enumeramos los pasos para publicar un evento en la API de Google Cloud Pub/Sub con el SDK de ABAP para Google Cloud.

En este codelab, se usan los siguientes servicios de Google Cloud:

  • Pub/Sub
  • Cloud Shell

Qué compilarás

Aprenderás lo siguiente:

  • Habilitar Pub/Sub en un proyecto de Google Cloud
  • Cree un tema de Pub/Sub.
  • Publica mensajes.

2. Antes de comenzar

6757b2fb50ddcc2d.png

  • Ejecuta los siguientes comandos para autenticar tu cuenta y establecer el proyecto predeterminado en abap-sdk-poc. Se usa la zona us-west4-b como ejemplo. Si es necesario, cambia el proyecto y la zona en los siguientes comandos según tus preferencias.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

3. Descripción general

El alcance de este codelab incluye los siguientes componentes de un servicio de Pub/Sub:

  • Publicador (también llamado productor): Crea mensajes y los envía (publica) al servicio de mensajería dentro de un tema específico.
  • Mensaje: Los datos que se mueven a través del servicio de mensajería.
  • Tema: Una entidad denominada que representa un feed de mensajes.

4f5676da8922467f.png

4. Configura el servicio de Pub/Sub

  1. Para crear una cuenta de servicio con el rol requerido, ejecuta el siguiente comando en la terminal de Cloud Shell:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. Para habilitar la API de Pub/Sub en tu cuenta de servicio (abap-sdk-poc), ejecuta el siguiente comando en la terminal de Cloud Shell:
gcloud services enable pubsub.googleapis.com
  1. Otorga el rol de IAM pubsub.topics.create a la cuenta de servicio para poder crear un tema. Ejecuta el siguiente comando en la terminal de 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. Otorga el rol de IAM pubsub.topics.publish a la cuenta de servicio para poder publicar un mensaje en el tema. Ejecuta el siguiente comando en la terminal de 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. Para verificar que se hayan agregado los roles, ve a la página IAM. La cuenta de servicio que creaste debería aparecer en la lista junto con los roles que se le asignaron.

5. Configura la clave de cliente

Para mantener la configuración en la tabla /GOOG/CLIENT_KEY, sigue estos pasos:

  1. En la GUI de SAP, ingresa el código de transacción SPRO.
  2. Haz clic en IMG de referencia de SAP.
  3. Haz clic en el SDK de ABAP para Google Cloud > Configuración básica > Configurar clave de cliente.
  4. Haz clic en Entradas nuevas.
  5. Ingresa los valores para los siguientes campos:

Campo

Descripción

Nombre de la clave de Google Cloud

PUBSUB_DEMO

Nombre de la cuenta de servicio de Google Cloud

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

Permiso de Google Cloud

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

Identificador de proyecto de Google Cloud

abap-sdk-poc

Clase de autorización

/GOOG/CL_AUTH_GOOGLE

Deja los otros campos en blanco

ec6b6f94bfa85533.png

6. Crea un tema

Creas un tema con el método CREATE_TOPICS del stub de API /GOOG/CL_PUBSUB_V1. Firma del método:

d40fde108ccf2853.png

  1. En la GUI de SAP, ingresa el código de transacción SE38.
  2. Crea un informe con el nombre ZPUBSUB_DEMO.
  3. En la ventana emergente que se abre, proporciona los detalles como se muestra a continuación y haz clic en Guardar.

f9cbdabb6ca96fc4.png

  1. En la siguiente ventana emergente, selecciona Objeto local o proporciona un nombre de paquete según corresponda.
  2. En el editor de ABAP, agrega el siguiente código:
" 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. Guarda y activa el informe.
  2. Ejecuta el informe (F8).

Si la ejecución se realiza correctamente, deberías ver el resultado del informe como se muestra a continuación:

16aa8a4c59d776d9.png

7. Publica un mensaje en el tema

Con el tema listo, ahora podemos enfocarnos en enviar los datos. A continuación, aprenderemos a publicar mensajes sobre este tema. Los mensajes se publican en el tema con el método PUBLISH_TOPICS del stub de la API /GOOG/CL_PUBSUB_V1.

Firma del método:

459fe21ce68bd811.png

  1. En la GUI de SAP, ingresa el código de transacción SE38.
  2. Crea un informe con el nombre ZPUBSUB_DEMO_PUBLISH.
  3. En la ventana emergente que se abre, proporciona los detalles como se muestra a continuación y haz clic en Guardar.

9a180c4e9a1e139.png

  1. En la siguiente ventana emergente, selecciona Objeto local o proporciona un nombre de paquete según corresponda.
  2. En el editor de ABAP, agrega el siguiente código:
" 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. Guarda y activa el informe.
  2. Ejecuta el informe (F8).

Si la ejecución se realiza correctamente, deberías ver el resultado del informe como se muestra a continuación:

384125235efc104.png

8. Felicitaciones

¡Felicitaciones! Publicaste correctamente un mensaje en la API de Pub/Sub de Google Cloud Platform con el SDK de ABAP para Google Cloud.

Ahora puedes continuar con el siguiente codelab para seguir con tu recorrido de aprendizaje sobre el uso del SDK de ABAP para acceder a varios servicios de Google Cloud.

  • Cómo recibir un evento de Cloud Pub/Sub
  • Sube un archivo a un bucket de Cloud Storage con división en fragmentos
  • Llama a test-bison de Vertex AI desde ABAP
  • . . .

9. Limpia

Si no deseas continuar con los codelabs adicionales relacionados con el SDK de ABAP para Google Cloud, continúa con la limpieza.

Borra el proyecto

  • Borra el proyecto de Google Cloud:
gcloud projects delete abap-sdk-poc

Cómo borrar recursos individuales

  1. Borra la instancia de procesamiento:
gcloud compute instances delete abap-trial-docker
  1. Borra las reglas de firewall:
gcloud compute firewall-rules delete sapmachine
  1. Borra la cuenta de servicio:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com