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
- Instalaste el SDK de ABAP para Google Cloud en tu sistema. Puedes consultar el codelab Install ABAP Trial on Google Cloud Platform para configurar un sistema nuevo.
- Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud. En la consola de Cloud, haz clic en Activar Cloud Shell en la esquina superior derecha:
- Ejecuta los siguientes comandos para autenticar tu cuenta y establecer el proyecto predeterminado en
abap-sdk-poc
. Se usa la zonaus-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.
4. Configura el servicio de Pub/Sub
- 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"
- 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
- 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'
- 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'
- 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:
- En la GUI de SAP, ingresa el código de transacción SPRO.
- Haz clic en IMG de referencia de SAP.
- Haz clic en el SDK de ABAP para Google Cloud > Configuración básica > Configurar clave de cliente.
- Haz clic en Entradas nuevas.
- 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
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:
- En la GUI de SAP, ingresa el código de transacción SE38.
- Crea un informe con el nombre ZPUBSUB_DEMO.
- En la ventana emergente que se abre, proporciona los detalles como se muestra a continuación y haz clic en Guardar.
- En la siguiente ventana emergente, selecciona Objeto local o proporciona un nombre de paquete según corresponda.
- 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.
- Guarda y activa el informe.
- Ejecuta el informe (F8).
Si la ejecución se realiza correctamente, deberías ver el resultado del informe como se muestra a continuación:
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:
- En la GUI de SAP, ingresa el código de transacción SE38.
- Crea un informe con el nombre ZPUBSUB_DEMO_PUBLISH.
- En la ventana emergente que se abre, proporciona los detalles como se muestra a continuación y haz clic en Guardar.
- En la siguiente ventana emergente, selecciona Objeto local o proporciona un nombre de paquete según corresponda.
- 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.
- Guarda y activa el informe.
- Ejecuta el informe (F8).
Si la ejecución se realiza correctamente, deberías ver el resultado del informe como se muestra a continuación:
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
- Borra la instancia de procesamiento:
gcloud compute instances delete abap-trial-docker
- Borra las reglas de firewall:
gcloud compute firewall-rules delete sapmachine
- Borra la cuenta de servicio:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com