1. Giriş
Bu codelab, Google Cloud için ABAP SDK'sını kullanarak bir Google Cloud Pub/Sub konusundan etkinlik ayrıntılarını alma konusunda size yol gösterir. Aşağıdaki Google Cloud hizmetlerinden yararlanacağız:
- Cloud Pub/Sub
- Cloud Shell
Ön koşullar
- Google Cloud için ABAP SDK'nın yüklü olduğu bir SAP sistemine erişiminiz olduğundan emin olun.
- Yeni bir sistem kurmak için "Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK" (Google Cloud Platform'da ABAP Platform Deneme Sürümünü ve ABAP SDK'sını Yükleme) adlı codelab'e başvurabilirsiniz.
- Google Cloud projenizde "ABAP SDK'sını kullanarak SAP'den Pub/Sub'a etkinlik gönderme" adlı Codelab'in bir parçası olarak bir konu
PUBSUB_DEMO_TOPIC
oluşturmuş olmanız gerekir. Oluşturulmamışsa aynı şeyi oluşturmak için aşağıdaki komutu kullanın:
gcloud pubsub topics create PUBSUB_DEMO_TOPIC
Ne oluşturacaksınız?
Aşağıdakileri oluşturursunuz:
- Pub/Sub API ile etkileşim için "Abone" izinlerine sahip bir hizmet hesabı.
- Pub/Sub konunuzdan mesaj almak ve bu mesajları onaylamak için bir ABAP programı.
2. Şartlar
- Chrome veya Firefox gibi tarayıcılar
- Faturalandırmanın etkin olduğu bir Google Cloud projesi veya Google Cloud Platform için 90 günlük ücretsiz deneme hesabı oluşturun.
- Sisteminizde yüklü SAP GUI (Windows veya Java) SAP GUI dizüstü bilgisayarınıza zaten yüklüyse Uygulama Sunucusu IP'si olarak VM'nin harici IP adresini kullanarak SAP'ye bağlanın. Mac kullanıyorsanız bu bağlantıda bulunan Java için SAP GUI'yi de yükleyebilirsiniz.
3. Başlamadan önce
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun (örneğin:
abap-sdk-poc
). - Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Faturalandırmanın bir projede etkin olup olmadığını kontrol etmeyi öğrenin. 90 günlük ücretsiz deneme hesabı kullanıyorsanız bu adımı atlayın.
- Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Cloud Console'da sağ üst köşedeki Cloud Shell'i Etkinleştir'i tıklayın:
- Hesabınızın kimliğini doğrulamak ve varsayılan projeyi
abap-sdk-poc
olarak ayarlamak için aşağıdaki komutları çalıştırın. Örnek olarakus-west4-b
bölgesi kullanılmıştır. Gerekirse lütfen aşağıdaki komutlarda projeyi ve bölgeyi tercihinize göre değiştirin.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Önceki "Pub/Sub'a etkinlik gönderme" adlı codelab'in bir parçası olarak Pub/Sub API'yi etkinleştirmiş, konuyu oluşturmuş ve Pub/Sub'a mesaj yayınlamış olmanız gerekir.
4. Pub/Sub erişimi için hizmet hesabı oluşturma
Subscriber
rolüne sahip bir hizmet hesabı kullanmak, ABAP programınızın Pub/Sub'dan mesaj almasının en güvenli yoludur. Bu rol, izinleri yalnızca ileti alma ile sınırlar ve olası güvenlik açıklarını önler.
Hizmet hesabını oluşturma
Gerekli role sahip bir hizmet hesabı oluşturmak için aşağıdaki adımları uygulayın:
- Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
gcloud iam service-accounts \
create abap-sdk-pubsub-subscriber \
--display-name="Service Account for Pub/Sub Subscriber"
- Şimdi yukarıdaki adımda oluşturulan hizmet hesabına gerekli rolleri ekleyin:
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'
Yukarıdaki komutta, Google Cloud projesi için yer tutucu olarak abap-sdk-poc
kullanılır. abap-sdk-poc
yerine proje kimliğinizi yazın.
- Rolün eklendiğini doğrulamak için IAM sayfasına gidin. Oluşturduğunuz hizmet hesabı, kendisine atanmış rolle birlikte listelenmelidir.
5. Pull aboneliklerini anlama
Çekme aboneliğinde SAP sisteminiz abone istemcisi olarak hareket eder ve mesajları almak için Pub/Sub sunucusuna istek gönderir. Abone istemcisi, REST Pull API'yi kullanır.
Temel API yöntemleri
Google Cloud Pub/Sub API
- pull: İletileri getirme isteği başlatır.
- acknowledge: Bir mesajın başarıyla işlendiğini Pub/Sub'a bildirir.
Google Cloud Equivalents için ABAP SDK'sı
- /GOOG/CL_PUBSUB_V1 -> PULL_SUBSCRIPTIONS
- /GOOG/CL_PUBSUB_V1 -> ACKNOWLEDGE_SUBSCRIPTIONS
Çekme aboneliği için ileti akışı
Aşağıdaki resimde, abone istemcisi ile çekme aboneliği arasındaki iş akışı gösterilmektedir.
- Çekme isteği: SAP sisteminiz (abone), Pub/Sub sunucusundan mesaj istemek için çekme yöntemini kullanır.
- Çekme Yanıtı: Pub/Sub sunucusu, sıfır veya daha fazla mesaj ve onay kimliğiyle yanıt verir. Sıfır mesaj içeren veya hata veren bir yanıt, alınabilecek mesaj olmadığı anlamına gelmez. Bu yanıt, resimde gösterildiği gibi PullResponse'tur.
- Onay: SAP sisteminiz, bir iletiyi işledikten sonra alınan onay kimliğiyle birlikte onay yöntemini kullanır. Bu, Pub/Sub'ın iletiyi yeniden teslim etmesini engeller.
6. Aboneliğinizi ayarlama ve mesaj gönderme
Çekme aboneliği oluşturma
PUBSUB_DEMO_SUBSCRIPTION
adlı bir çekme aboneliği oluşturmak için bu gcloud komutunu yürütün. Bu abonelik,PUBSUB_DEMO_TOPIC
konusundan mesaj alır:
gcloud pubsub subscriptions create PUBSUB_DEMO_SUBSCRIPTION \
--topic=PUBSUB_DEMO_TOPIC
Mesajları yayınlama
PUBSUB_DEMO_TOPIC
adresine mesaj göndermek için aşağıdaki yöntemlerden birini seçin:
- Programınızı yeniden kullanın: Yayınlamak için önceki bir codelab 'den programınız varsa onu kullanın.
- Doğrudan yayınlama: Hızlı bir test için aşağıdaki seçeneklerden birini deneyin:
- Cloud Console: Doğrudan Google Cloud Console'da yayınlayın. Daha fazla bilgi için Pub/Sub dokümanlarına bakın.
- gcloud komutu: Aşağıdaki komutu çalıştırın:
gcloud pubsub topics publish PUBSUB_DEMO_TOPIC \
--message='{"eventType":"SalesOrderChanged","source":"SAPDEV100","eventTime":"20240207183048","SalesOrder":1000924}'
7. İstemci anahtarı yapılandırması oluşturma
Google Cloud tarafında ön koşulları ayarladığınıza göre, SAP tarafındaki yapılandırmaya geçebiliriz.
Google Cloud için ABAP SDK, kimlik doğrulama ve bağlantıyla ilgili yapılandırma için /GOOG/CLIENT_KEY
ve /GOOG/SERVIC_MAP.
tablolarını kullanır.
Tablodaki /GOOG/CLIENT_KEY
tablosundaki yapılandırmayı korumak için aşağıdaki adımları uygulayın:
- SAP GUI'de SPRO işlem kodunu girin.
- SAP Reference IMG'yi (SAP Referans IMG) tıklayın.
- Google Cloud için ABAP SDK'sı > Temel Ayarlar > İstemci Anahtarını Yapılandır'ı tıklayın.
- Alanlara göre aşağıdaki değerleri koruyun. Diğer tüm alanları boş bırakın.
Alan | Değer |
Google Cloud Anahtar Adı | PUBSUB_SUBSCRIBER |
Google Cloud hizmet hesabı adı | abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud Kapsamı | https://www.googleapis.com/auth/cloud-platform |
Proje kimliği | abap-sdk-poc |
Yetkilendirme sınıfı | /GOOG/CL_AUTH_GOOGLE |
8. Google Cloud Pub/Sub'dan mesaj almak için bir ABAP raporu oluşturma
- SAP sisteminize giriş yapın.
- İşlem koduna
SE38
gidin veZDEMO_RECEIVE_CPS_EVENTS.
adında bir Rapor Programı oluşturun. - Açılan pop-up'ta aşağıdaki gibi ayrıntıları girin ve Kaydet'i tıklayın.
- Sonraki pop-up pencerede Yerel Nesne'yi seçin veya uygun bir paket adı girin.
- ABAP düzenleyicide aşağıdaki kodu ekleyin:
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.
- Raporu kaydedip etkinleştirin.
- Raporu çalıştırın (F8).
Başarılı bir yürütmenin ardından rapor çıkışını aşağıdaki gibi görmeniz gerekir:
9. ABAP Pub/Sub abone kodu açıklaması
Bu ABAP programı, Google Cloud Pub/Sub ile mesaj abonesi olarak entegre olur. Belirtilen abonelikteki yeni iletileri isteğe bağlı olarak kontrol eder, işler ve gelecekte yeniden teslim edilmelerini önlemek için alındıklarını onaylar.
Program aşağıdaki etkinlikleri gerçekleştirir:
Adım adım açıklamalı kılavuz
Bağlantı Kurma:
/GOOG/CL_PUBSUB_V1
sınıfını kullanarak Google Cloud Pub/Sub hizmetiyle bir HTTP bağlantısı oluşturur.
Parametreleri ayarlama:
- Proje kimliği: Pub/Sub aboneliğinin bulunduğu ilgili proje kimliğini ayıklar.
- Abonelik Adı: İletilerin alınacağı aboneliğin adını belirtir (
PUBSUB_DEMO_SUBSCRIPTION
). - İleti Sınırı: Tek bir API çağrısında alınacak maksimum ileti sayısını (bu durumda 1) belirler.
İletileri Getir:
- Belirtilen abonelikten mesaj almak için
pull_subscriptions
yöntemini çağırır.
Alınan İletileri İşleme:
- İleti varsa program verileri çözer, içeriği günlüğe kaydeder ve onay gönderir.
İletileri Onaylama:
- İletilerin başarıyla alındığını belirten bir onay Pub/Sub'a göndermek için
acknowledge_subscriptions
yöntemini çağırır. Bu, iletilerin yeniden teslim edilmesini engeller.
Başarıları/Hataları İşleme:
- İletiler alındığında ve onaylandığında başarı mesajları gösterir. Çeşitli hata senaryoları (ileti alınmaması, API hataları vb.) için hata mesajları gösterir.
Bağlantıyı Kapatma:
- Pub/Sub hizmetiyle HTTP bağlantısını kapatır.
10. Tebrikler
"Google Cloud için ABAP SDK'sını kullanarak Cloud Pub/Sub'dan etkinlik alma" Codelab'ini tamamladığınız için tebrikler.
ABAP ile Google Cloud Pub/Sub arasında başarıyla köprü oluşturdunuz. Bu codelab'i tamamlamanız, etkinliğe dayalı mesajlaşma ve Google Cloud hizmetleriyle entegrasyon için Google Cloud'a yönelik ABAP SDK'sının nasıl kullanılacağı konusunda sağlam bir anlayışa sahip olduğunuzu gösterir. Tebrikler!
ABAP ile Google Cloud Hizmetleri arasında yeni bir entegrasyon düzeyine ulaştınız. Aşağıdaki heyecan verici seçeneklerle ufkunuzu genişletin:
- Google Cloud için ABAP SDK ile Translation API'yi kullanma
- Parçalama kullanarak Cloud Storage paketine büyük bir nesne yükleme
- Google Cloud için ABAP SDK ile Secret Manager'dan kimlik bilgileri/gizli anahtarlar alma
- ABAP'tan Vertex AI test-bison'u çağırma
- ABAP'tan BigQuery ML'yi çağırma
11. Temizleme
Google Cloud için ABAP SDK ile ilgili ek codelab'lere devam etmek istemiyorsanız lütfen temizleme işlemine geçin.
Projeyi silme
- Google Cloud projesini silin:
gcloud projects delete abap-sdk-poc
Belirli kaynakları silme
- Compute örneğini silin:
gcloud compute instances delete abap-trial-docker
- Güvenlik duvarı kurallarını silin:
gcloud compute firewall-rules delete sapmachine
- Hizmet hesabını silin:
gcloud iam service-accounts delete \
abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com