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. 시작하기 전에
- 시스템에 ABAP SDK for Google Cloud를 설치했습니다. Google Cloud Platform에 ABAP 체험판 설치 Codelab을 참고하여 새 시스템을 설정할 수 있습니다.
- Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. Cloud 콘솔에서 오른쪽 상단에 있는 Cloud Shell 활성화를 클릭합니다.
- 다음 명령어를 실행하여 계정을 인증하고 기본 프로젝트를
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 서비스의 다음 구성요소를 다룹니다.
- 게시자 (또는 제작자): 메시지를 만들어 특정 주제의 메시징 서비스로 전송 (게시)합니다.
- 메시지: 메시지 서비스를 통해 이동하는 데이터
- 주제: 메시지 피드를 나타내는, 이름이 지정된 항목입니다.
4. Pub/Sub 서비스 설정
- 필요한 역할이 있는 서비스 계정을 만들려면 Cloud Shell 터미널에서 다음 명령어를 실행합니다.
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- 서비스 계정 (
abap-sdk-poc
)에 Pub/Sub API를 사용 설정하려면 Cloud Shell 터미널에서 다음 명령어를 실행합니다.
gcloud services enable pubsub.googleapis.com
- 주제를 만들 수 있도록 서비스 계정에 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'
- 주제에 메시지를 게시할 수 있도록 서비스 계정에 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'
- 역할이 추가되었는지 확인하려면 IAM 페이지로 이동합니다. 만든 서비스 계정이 할당된 역할과 함께 표시됩니다.
5. 클라이언트 키 구성
/GOOG/CLIENT_KEY
테이블의 구성을 유지하려면 다음 단계를 따르세요.
- SAP GUI에서 트랜잭션 코드 SPRO를 입력합니다.
- SAP 참조 IMG를 클릭합니다.
- ABAP SDK for Google Cloud > 기본 설정 > 클라이언트 키 구성을 클릭합니다.
- 새 항목을 클릭합니다.
- 다음 필드에 값을 입력합니다.
필드 | 설명 |
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 |
기타 입력란은 비워 둡니다.
6. 주제 만들기
API 스텁 /GOOG/CL_PUBSUB_V1의 CREATE_TOPICS 메서드를 사용하여 주제를 만듭니다. 메서드 서명:
- SAP GUI에서 트랜잭션 코드 SE38을 입력합니다.
- ZPUBSUB_DEMO라는 이름의 보고서를 만듭니다.
- 열리는 팝업에서 아래와 같이 세부정보를 입력하고 저장을 클릭합니다.
- 다음 팝업에서 로컬 객체를 선택하거나 적절하게 패키지 이름을 입력합니다.
- 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.
- 보고서를 저장하고 활성화합니다.
- 보고서를 실행합니다 (F8).
실행에 성공하면 아래와 같이 보고서 출력이 표시됩니다.
7. 주제에 메시지 게시
이제 주제가 준비되었으므로 데이터를 전송하는 데 집중할 수 있습니다. 다음 단계에서는 이 주제에 메시지를 게시하는 방법을 알아봅니다. 메시지는 API 스텁 /GOOG/CL_PUBSUB_V1
의 PUBLISH_TOPICS
메서드를 사용하여 주제에 게시됩니다.
메서드 서명:
- SAP GUI에서 트랜잭션 코드 SE38을 입력합니다.
- ZPUBSUB_DEMO_PUBLISH라는 이름의 보고서를 만듭니다.
- 열리는 팝업에서 아래와 같이 세부정보를 입력하고 저장을 클릭합니다.
- 다음 팝업에서 로컬 객체를 선택하거나 적절하게 패키지 이름을 입력합니다.
- 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.
- 보고서를 저장하고 활성화합니다.
- 보고서를 실행합니다 (F8).
실행에 성공하면 아래와 같이 보고서 출력이 표시됩니다.
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
개별 리소스 삭제
- 컴퓨팅 인스턴스를 삭제합니다.
gcloud compute instances delete abap-trial-docker
- 방화벽 규칙을 삭제합니다.
gcloud compute firewall-rules delete sapmachine
- 서비스 계정을 삭제합니다.
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com