Google Cloud용 ABAP SDK를 사용하여 Cloud Pub/Sub에 이벤트 게시

1. 소개

이 Codelab에서는 ABAP SDK for Google Cloud를 사용하여 Google Cloud Pub/Sub API에 이벤트를 게시하는 단계를 설명했습니다.

이 Codelab에서는 다음 Google Cloud 서비스를 사용합니다.

  • Pub/Sub
  • Cloud Shell

빌드할 항목

다음을 알아봅니다.

  • Google Cloud 프로젝트에서 Pub/Sub를 사용 설정합니다.
  • Pub/Sub 주제를 만듭니다.
  • 메시지를 게시합니다.

2. 시작하기 전에

6757b2fb50ddcc2d.png

  • 다음 명령어를 실행하여 계정을 인증하고 기본 프로젝트를 abap-sdk-poc로 설정합니다. 영역 us-west4-b를 예로 들 수 있습니다. 필요한 경우 다음 명령어에서 프로젝트와 영역을 원하는 대로 변경하세요.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

3. 개요

이 Codelab의 범위는 Pub/Sub 서비스의 다음 구성요소를 다룹니다.

  • 게시자 (또는 제작자): 메시지를 만들어 특정 주제의 메시징 서비스로 전송 (게시)합니다.
  • 메시지: 메시지 서비스를 통해 이동하는 데이터
  • 주제: 메시지 피드를 나타내는, 이름이 지정된 항목입니다.

4f5676da8922467f.png

4. Pub/Sub 서비스 설정

  1. 필요한 역할이 있는 서비스 계정을 만들려면 Cloud Shell 터미널에서 다음 명령어를 실행합니다.
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. 서비스 계정 (abap-sdk-poc)에 Pub/Sub API를 사용 설정하려면 Cloud Shell 터미널에서 다음 명령어를 실행합니다.
gcloud services enable pubsub.googleapis.com
  1. 주제를 만들 수 있도록 서비스 계정에 pubsub.topics.create IAM 역할을 부여합니다. 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. 주제에 메시지를 게시할 수 있도록 서비스 계정에 pubsub.topics.publish IAM 역할을 부여합니다. 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. 역할이 추가되었는지 확인하려면 IAM 페이지로 이동합니다. 만든 서비스 계정이 할당된 역할과 함께 표시됩니다.

5. 클라이언트 키 구성

/GOOG/CLIENT_KEY 테이블의 구성을 유지하려면 다음 단계를 따르세요.

  1. SAP GUI에서 트랜잭션 코드 SPRO를 입력합니다.
  2. SAP 참조 IMG를 클릭합니다.
  3. ABAP SDK for Google Cloud > 기본 설정 > 클라이언트 키 구성을 클릭합니다.
  4. 새 항목을 클릭합니다.
  5. 다음 필드에 값을 입력합니다.

필드

설명

Google Cloud 키 이름

PUBSUB_DEMO

Google Cloud 서비스 계정 이름

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

Google Cloud 범위

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

Google Cloud 프로젝트 식별자

abap-sdk-poc

승인 클래스

/GOOG/CL_AUTH_GOOGLE

기타 입력란은 비워 둡니다.

ec6b6f94bfa85533.png

6. 주제 만들기

API 스텁 /GOOG/CL_PUBSUB_V1의 CREATE_TOPICS 메서드를 사용하여 주제를 만듭니다. 메서드 서명:

d40fde108ccf2853.png

  1. SAP GUI에서 트랜잭션 코드 SE38을 입력합니다.
  2. ZPUBSUB_DEMO라는 이름의 보고서를 만듭니다.
  3. 열리는 팝업에서 아래와 같이 세부정보를 입력하고 저장을 클릭합니다.

f9cbdabb6ca96fc4.png

  1. 다음 팝업에서 로컬 객체를 선택하거나 적절하게 패키지 이름을 입력합니다.
  2. ABAP 편집기에서 다음 코드를 추가합니다.
" 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. 보고서를 저장하고 활성화합니다.
  2. 보고서를 실행합니다 (F8).

실행에 성공하면 아래와 같이 보고서 출력이 표시됩니다.

16aa8a4c59d776d9.png

7. 주제에 메시지 게시

이제 주제가 준비되었으므로 데이터를 전송하는 데 집중할 수 있습니다. 다음 단계에서는 이 주제에 메시지를 게시하는 방법을 알아봅니다. 메시지는 API 스텁 /GOOG/CL_PUBSUB_V1PUBLISH_TOPICS 메서드를 사용하여 주제에 게시됩니다.

메서드 서명:

459fe21ce68bd811.png

  1. SAP GUI에서 트랜잭션 코드 SE38을 입력합니다.
  2. ZPUBSUB_DEMO_PUBLISH라는 이름의 보고서를 만듭니다.
  3. 열리는 팝업에서 아래와 같이 세부정보를 입력하고 저장을 클릭합니다.

9a180c4e9a1e139.png

  1. 다음 팝업에서 로컬 객체를 선택하거나 적절하게 패키지 이름을 입력합니다.
  2. ABAP 편집기에서 다음 코드를 추가합니다.
" 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. 보고서를 저장하고 활성화합니다.
  2. 보고서를 실행합니다 (F8).

실행에 성공하면 아래와 같이 보고서 출력이 표시됩니다.

384125235efc104.png

8. 축하합니다

축하합니다. ABAP SDK for Google Cloud를 사용하여 Google Cloud Platform의 Pub/Sub API에 메시지를 게시했습니다.

이제 아래 Codelab을 진행하여 ABAP SDK를 사용하여 다양한 Google Cloud 서비스에 액세스하는 방법을 계속 학습할 수 있습니다.

  • Cloud Pub/Sub에서 이벤트 수신
  • 청크를 사용하여 Cloud Storage 버킷에 파일 업로드
  • ABAP에서 Vertex AI test-bison 호출
  • . . .

9. 삭제

ABAP SDK for Google Cloud와 관련된 추가 Codelab을 계속 진행하고 싶지 않다면 정리를 진행하세요.

프로젝트 삭제

  • Google Cloud 프로젝트를 삭제합니다.
gcloud projects delete abap-sdk-poc

개별 리소스 삭제

  1. 컴퓨팅 인스턴스를 삭제합니다.
gcloud compute instances delete abap-trial-docker
  1. 방화벽 규칙을 삭제합니다.
gcloud compute firewall-rules delete sapmachine
  1. 서비스 계정을 삭제합니다.
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com