1. Pengantar
Codelab ini memandu Anda menerima detail peristiwa dari topik Google Cloud Pub/Sub menggunakan ABAP SDK untuk Google Cloud. Kita akan memanfaatkan layanan Google Cloud berikut:
- Cloud Pub/Sub
- Cloud Shell
Prasyarat
- Pastikan Anda memiliki akses ke sistem SAP dengan ABAP SDK untuk Google Cloud yang diinstal.
- Anda dapat melihat codelab " Menginstal Uji Coba Platform ABAP di Google Cloud Platform dan Menginstal ABAP SDK" untuk menyiapkan sistem baru.
- Anda telah membuat topik
PUBSUB_DEMO_TOPIC
sebagai bagian dari Codelab " Mengirim peristiwa dari SAP ke Pub/Sub menggunakan ABAP SDK" di Project Google Cloud Anda. Jika belum dibuat, gunakan perintah di bawah untuk membuatnya:
gcloud pubsub topics create PUBSUB_DEMO_TOPIC
Yang akan Anda build
Anda akan membuat hal berikut:
- Akun layanan dengan izin 'Subscriber' untuk berinteraksi dengan Pub/Sub API.
- Program ABAP untuk menerima dan mengonfirmasi pesan dari topik Pub/Sub Anda.
2. Persyaratan
- Browser, seperti Chrome atau Firefox.
- Project Google Cloud dengan penagihan diaktifkan atau Buat akun Uji Coba Gratis 90 Hari untuk Google Cloud Platform.
- SAP GUI (Windows atau Java) yang diinstal di sistem Anda. Jika SAP GUI sudah diinstal di laptop, hubungkan ke SAP menggunakan alamat IP eksternal VM sebagai IP Server Aplikasi. Jika menggunakan Mac, Anda juga dapat menginstal SAP GUI untuk Java yang tersedia di link ini.
3. Sebelum memulai
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud (Misalnya:
abap-sdk-poc
). - Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project. Lewati langkah ini jika Anda menggunakan Akun Uji Coba Gratis 90 Hari.
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud. Dari Cloud Console, klik Activate Cloud Shell di pojok kanan atas:
- Jalankan perintah berikut untuk melakukan autentikasi untuk akun Anda dan menetapkan project default ke
abap-sdk-poc
. Zonaus-west4-b
digunakan sebagai contoh. Jika diperlukan, ubah project dan zona dalam perintah berikut berdasarkan preferensi Anda.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Sebagai bagian dari codelab sebelumnya " Kirim peristiwa ke Pub/Sub", Anda harus sudah mengaktifkan pub/sub API, membuat topik, dan memublikasikan pesan ke Pub/Sub.
4. Membuat akun layanan untuk akses Pub/Sub
Menggunakan akun layanan dengan peran Subscriber
adalah cara paling aman bagi program ABAP Anda untuk menerima pesan dari Pub/Sub. Peran ini membatasi izin hanya untuk pengambilan pesan, sehingga mencegah potensi kerentanan keamanan.
Membuat Akun Layanan
Untuk membuat akun layanan dengan peran yang diperlukan, lakukan langkah-langkah berikut:
- Jalankan perintah berikut di terminal Cloud Shell:
gcloud iam service-accounts \
create abap-sdk-pubsub-subscriber \
--display-name="Service Account for Pub/Sub Subscriber"
- Sekarang, tambahkan peran yang diperlukan ke akun layanan yang dibuat pada langkah di atas:
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/pubsub.subscriber'
Perintah di atas menggunakan abap-sdk-poc
sebagai placeholder untuk Project Google Cloud. Ganti abap-sdk-poc
dengan project ID Anda.
- Untuk memverifikasi bahwa peran telah ditambahkan, buka halaman IAM. Akun layanan yang Anda buat akan tercantum beserta peran yang telah ditetapkan.
5. Memahami langganan pull
Untuk langganan pull, sistem SAP Anda bertindak sebagai klien pelanggan dan memulai permintaan ke server Pub/Sub untuk mengambil pesan. Klien pelanggan menggunakan REST Pull API.
Metode API utama
Google Cloud Pub/Sub API
- pull: Memulai permintaan untuk mengambil pesan.
- acknowledge: Memberi sinyal ke Pub/Sub bahwa pesan telah berhasil diproses.
ABAP SDK untuk Google Cloud Equivalents
- /GOOG/CL_PUBSUB_V1 -> PULL_SUBSCRIPTIONS
- /GOOG/CL_PUBSUB_V1 -> ACKNOWLEDGE_SUBSCRIPTIONS
Alur pesan untuk langganan pull
Gambar berikut menunjukkan alur kerja antara klien pelanggan dan langganan pull.
- Permintaan Pull: Sistem SAP Anda (pelanggan) menggunakan metode pull untuk meminta pesan dari server Pub/Sub.
- Respons Pull: Server Pub/Sub merespons dengan nol atau beberapa pesan dan ID konfirmasi. Respons dengan nol pesan atau dengan error tidak selalu menunjukkan bahwa tidak ada pesan yang tersedia untuk diterima. Respons ini adalah PullResponse seperti yang ditunjukkan pada gambar.
- Konfirmasi: Setelah memproses pesan, sistem SAP Anda akan menggunakan metode konfirmasi beserta ID konfirmasi yang diterima. Tindakan ini mencegah Pub/Sub mengirim ulang pesan.
6. Menyiapkan langganan dan mengirim pesan
Membuat Langganan Pull
- Jalankan perintah gcloud ini untuk membuat langganan pull bernama
PUBSUB_DEMO_SUBSCRIPTION
yang akan menerima pesan dariPUBSUB_DEMO_TOPIC
:
gcloud pubsub subscriptions create PUBSUB_DEMO_SUBSCRIPTION \
--topic=PUBSUB_DEMO_TOPIC
Memublikasikan Pesan
Pilih salah satu metode berikut untuk mengirim pesan ke PUBSUB_DEMO_TOPIC
:
- Gunakan kembali program Anda: Jika Anda memiliki program dari codelab sebelumnya untuk dipublikasikan, gunakan program tersebut.
- Publikasi Langsung: Untuk pengujian cepat, coba salah satu opsi berikut:
- Cloud Console: Memublikasikan langsung di dalam Google Cloud Console. Untuk mengetahui detail selengkapnya, lihat dokumentasi Pub/Sub.
- Perintah gcloud: Jalankan perintah berikut:
gcloud pubsub topics publish PUBSUB_DEMO_TOPIC \
--message='{"eventType":"SalesOrderChanged","source":"SAPDEV100","eventTime":"20240207183048","SalesOrder":1000924}'
7. Membuat konfigurasi kunci klien
Setelah Anda menyiapkan prasyarat di sisi Google Cloud, kita dapat melanjutkan konfigurasi di sisi SAP.
Untuk konfigurasi terkait autentikasi dan konektivitas, ABAP SDK untuk Google Cloud menggunakan tabel /GOOG/CLIENT_KEY
dan /GOOG/SERVIC_MAP.
Untuk mempertahankan konfigurasi di tabel /GOOG/CLIENT_KEY
, lakukan langkah-langkah berikut:
- Di SAP GUI, masukkan kode transaksi SPRO.
- Klik IMG Referensi SAP.
- Klik ABAP SDK for Google Cloud > Basic Settings > Configure Client Key.
- Pertahankan nilai berikut terhadap kolom. Biarkan kolom lain kosong.
Kolom | Nilai |
Google Cloud Key Name | PUBSUB_SUBSCRIBER |
Nama Akun Layanan Google Cloud | abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud Scope | https://www.googleapis.com/auth/cloud-platform |
ID Project | abap-sdk-poc |
Class Otorisasi | /GOOG/CL_AUTH_GOOGLE |
8. Membuat laporan ABAP untuk menerima pesan dari Google Cloud Pub/Sub
- Login ke sistem SAP Anda.
- Buka kode transaksi
SE38
dan buat Program Laporan dengan namaZDEMO_RECEIVE_CPS_EVENTS.
- Di pop-up yang terbuka, berikan detail seperti yang ditunjukkan di bawah, lalu klik Simpan.
- Di pop-up berikutnya, pilih Local Object atau berikan nama paket yang sesuai.
- Di ABAP Editor, tambahkan kode berikut:
REPORT zdemo_receive_cps_events. TYPES: BEGIN OF ty_event_message, event_time TYPE timestamp, event_type TYPE char30, source TYPE char30, sales_order TYPE vbeln, END OF ty_event_message. DATA: ls_input TYPE /goog/cl_pubsub_v1=>ty_026, ls_input_ack TYPE /goog/cl_pubsub_v1=>ty_001, ls_event_msg TYPE ty_event_message. TRY. "Open HTTP Connection DATA(lo_client) = NEW /goog/cl_pubsub_v1( iv_key_name = 'PUBSUB_SUBSCRIBER' ). "Populate relevant parameters " Derive project id from the client object DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ). " Name of the subscription from where we want to pull data DATA(lv_p_subscriptions_id) = CONV string( 'PUBSUB_DEMO_SUBSCRIPTION' ). " Max number of messages that will be received in 1 API call ls_input-max_messages = 1. "Call API method: pubsub.projects.subscriptions.pull lo_client->pull_subscriptions( EXPORTING iv_p_projects_id = lv_p_projects_id iv_p_subscriptions_id = lv_p_subscriptions_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 ). DATA(ls_received_msg) = VALUE #( ls_output-received_messages[ 1 ] OPTIONAL ). IF ls_received_msg IS NOT INITIAL. "Messages published to Pub/Sub should be base-64 encoded, hence in order to get the exact message, we need to decode the data field. "However, attributes published to Pub/Sub should be accessible as data references. DATA(lv_msg) = |{ cl_http_utility=>decode_base64( encoded = ls_received_msg-message-data ) }|. /ui2/cl_json=>deserialize( EXPORTING json = lv_msg pretty_name = /ui2/cl_json=>pretty_mode-extended CHANGING data = ls_event_msg ). cl_demo_output=>new( )->begin_section( |Receive Events from Cloud Pubsub using ABAP SDK for Google Cloud| )->write_text( |The below event was successfully received with message ID { ls_received_msg-message-MESSAGE_ID }| )->write_data( ls_event_msg )->end_section( )->display( ). ls_input_ack-ack_ids = VALUE #( ( ls_received_msg-ack_id ) ). "Call API method: pubsub.projects.subscriptions.acknowledge "Acknowledge the messages so it is not pulled again. lo_client->acknowledge_subscriptions( EXPORTING iv_p_projects_id = lv_p_projects_id iv_p_subscriptions_id = lv_p_subscriptions_id is_input = ls_input_ack IMPORTING es_output = DATA(ls_output_ack) ev_ret_code = lv_ret_code ev_err_text = lv_err_text es_err_resp = ls_err_resp ). IF lo_client->is_success( lv_ret_code ). MESSAGE lv_msg TYPE 'S'. ELSE. MESSAGE lv_err_text TYPE 'E'. ENDIF. ELSE. MESSAGE 'No Messages were received!' TYPE 'S'. ENDIF. 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'. ENDTRY.
- Simpan dan aktifkan Laporan.
- Jalankan laporan (F8).
Jika berhasil dieksekusi, Anda akan melihat output laporan seperti yang ditunjukkan di bawah ini:
9. Penjelasan kode pelanggan Pub/Sub ABAP
Pada dasarnya, program ABAP ini terintegrasi dengan Google Cloud Pub/Sub sebagai pelanggan pesan. Fungsi ini memeriksa langganan yang ditentukan untuk pesan baru sesuai permintaan, memprosesnya, lalu mengonfirmasi penerimaannya untuk mencegah pengiriman ulang di masa mendatang.
Program ini akan melakukan aktivitas berikut:
Perincian langkah demi langkah
Buat Koneksi:
- Fungsi ini membuat koneksi HTTP ke layanan Google Cloud Pub/Sub menggunakan class
/GOOG/CL_PUBSUB_V1
.
Tetapkan Parameter:
- Project ID: Mengekstrak Project ID yang relevan tempat langganan Pub/Sub berada.
- Nama Langganan: Menentukan nama Langganan tempat pesan akan diambil (
PUBSUB_DEMO_SUBSCRIPTION
). - Batas Pesan: Menetapkan jumlah maksimum pesan yang akan diambil dalam satu panggilan API (dalam hal ini, 1).
Mengambil Pesan:
- Memanggil metode
pull_subscriptions
untuk mengambil pesan dari langganan yang ditentukan.
Proses Pesan yang Diterima:
- Jika ada pesan, program akan mendekode data, mencatat konten ke dalam log, dan mengirim konfirmasi.
Mengonfirmasi Pesan:
- Memanggil metode
acknowledge_subscriptions
untuk mengirim konfirmasi ke Pub/Sub yang menunjukkan keberhasilan penerimaan pesan. Hal ini mencegah pesan tersebut dikirim ulang.
Menangani Keberhasilan/Error:
- Memberikan pesan berhasil jika pesan diterima dan diakui serta menampilkan pesan error untuk berbagai skenario kegagalan (tidak ada pesan yang diterima, error API, dll.).
Tutup Koneksi:
- Menutup koneksi HTTP ke layanan Pub/Sub.
10. Selamat
Anda telah menyelesaikan Codelab "Menerima peristiwa dari Cloud Pub/Sub menggunakan ABAP SDK untuk Google Cloud" dengan sangat baik.
Anda telah berhasil membuat jembatan antara ABAP dan Google Cloud Pub/Sub. Penyelesaian codelab Anda menunjukkan pemahaman yang kuat tentang pesan berbasis peristiwa dan cara menggunakan ABAP SDK untuk Google Cloud guna berintegrasi dengan layanan Google Cloud. Bagus!
Anda telah membuka tingkat integrasi baru antara ABAP dan Layanan Google Cloud. Perluas wawasan Anda dengan opsi menarik berikut:
- Menggunakan Translation API dengan ABAP SDK untuk Google Cloud
- Mengupload objek besar ke bucket Cloud Storage menggunakan chunking
- Mengambil Kredensial/Rahasia dari Secret Manager dengan ABAP SDK untuk Google Cloud
- Memanggil Vertex AI test-bison dari ABAP
- Memanggil BigQuery ML dari ABAP
11. Pembersihan
Jika Anda tidak ingin melanjutkan codelab tambahan yang terkait dengan ABAP SDK untuk Google Cloud, lanjutkan pembersihan.
Menghapus project
- Hapus project Google Cloud:
gcloud projects delete abap-sdk-poc
Menghapus resource satu per satu
- Hapus instance komputasi:
gcloud compute instances delete abap-trial-docker
- Hapus aturan Firewall:
gcloud compute firewall-rules delete sapmachine
- Hapus akun layanan:
gcloud iam service-accounts delete \
abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com