เกี่ยวกับ Codelab นี้
1 บทนำ
ในโค้ดแล็บนี้ เราได้แสดงขั้นตอนในการเผยแพร่เหตุการณ์ไปยัง Google Cloud Pub/Sub API โดยใช้ ABAP SDK สำหรับ Google Cloud
ในโค้ดแล็บนี้จะใช้บริการ Google Cloud ต่อไปนี้
- Pub/Sub
- Cloud Shell
สิ่งที่คุณจะสร้าง
คุณจะได้เรียนรู้สิ่งต่อไปนี้
- เปิดใช้ Pub/Sub ในโปรเจ็กต์ Google Cloud
- สร้างหัวข้อ Pub/Sub
- เผยแพร่ข้อความ
2 ก่อนเริ่มต้น
- คุณได้ติดตั้ง ABAP SDK สำหรับ Google Cloud ในระบบแล้ว คุณสามารถดู codelab - ติดตั้ง ABAP เวอร์ชันทดลองใน Google Cloud Platform เพื่อตั้งค่าระบบใหม่
- คุณใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud จาก Cloud Console ให้คลิกเปิดใช้งาน 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"
- หากต้องการเปิดใช้ Pub/Sub API ในบัญชีบริการ (
abap-sdk-poc
) ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell
gcloud services enable pubsub.googleapis.com
- มอบบทบาท IAM pubsub.topics.create ให้กับบัญชีบริการเพื่อให้สร้างหัวข้อได้ เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล 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'
- มอบบทบาท IAM pubsub.topics.publish ให้กับบัญชีบริการเพื่อให้เผยแพร่ข้อความไปยังหัวข้อได้ เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล 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 Reference IMG
- คลิก ABAP SDK สำหรับ 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 สร้างหัวข้อ
คุณสร้างหัวข้อโดยใช้เมธอด CREATE_TOPICS ของ API สตับ /GOOG/CL_PUBSUB_V1 ลายเซ็นของเมธอด
- ใน SAP GUI ให้ป้อนรหัสธุรกรรม SE38
- สร้างรายงานชื่อ ZPUBSUB_DEMO
- ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดตามที่แสดงด้านล่าง แล้วคลิกบันทึก
- ในป๊อปอัปถัดไป ให้เลือกออบเจ็กต์ในเครื่องหรือระบุชื่อแพ็กเกจตามความเหมาะสม
- ใน ABAP Editor ให้เพิ่มโค้ดต่อไปนี้
" 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 เผยแพร่ข้อความไปยังหัวข้อ
เมื่อหัวข้อพร้อมใช้งานแล้ว ตอนนี้เราก็สามารถมุ่งเน้นไปที่การส่งข้อมูลไปยังหัวข้อนั้นได้ ในขั้นตอนถัดไป เรามาดูวิธีเผยแพร่ข้อความในหัวข้อนี้กัน ระบบจะเผยแพร่ข้อความไปยังหัวข้อโดยใช้เมธอด PUBLISH_TOPICS
ของ API Stub /GOOG/CL_PUBSUB_V1
ลายเซ็นของเมธอด
- ใน SAP GUI ให้ป้อนรหัสธุรกรรม SE38
- สร้างรายงานชื่อ ZPUBSUB_DEMO_PUBLISH
- ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดตามที่แสดงด้านล่าง แล้วคลิกบันทึก
- ในป๊อปอัปถัดไป ให้เลือกออบเจ็กต์ในเครื่องหรือระบุชื่อแพ็กเกจตามความเหมาะสม
- ใน ABAP Editor ให้เพิ่มโค้ดต่อไปนี้
" 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 ขอแสดงความยินดี
ยินดีด้วย คุณเผยแพร่ข้อความไปยัง Pub/Sub API ของ Google Cloud Platform โดยใช้ ABAP SDK สำหรับ Google Cloud เรียบร้อยแล้ว
ตอนนี้คุณสามารถทำตาม Codelab ด้านล่างเพื่อเรียนรู้การใช้ ABAP SDK เพื่อเข้าถึงบริการต่างๆ ของ Google Cloud ต่อไปได้แล้ว
- รับเหตุการณ์จาก Cloud Pub/Sub
- อัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage ด้วยการแบ่งเป็นส่วน
- เรียกใช้ test-bison ของ Vertex AI จาก ABAP
- . . .
9 ล้างข้อมูล
หากไม่ต้องการทำ Codelab เพิ่มเติมที่เกี่ยวข้องกับ ABAP SDK สำหรับ Google Cloud ต่อ โปรดดำเนินการล้างข้อมูล
ลบโปรเจ็กต์
- ลบโปรเจ็กต์ Google Cloud โดยทำดังนี้
gcloud projects delete abap-sdk-poc
ลบทรัพยากรแต่ละรายการ
- ลบอินสแตนซ์ Compute โดยทำดังนี้
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