1. Giriş
Bu kod laboratuvarı, 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'sının yüklü olduğu bir SAP sistemine erişiminiz olduğundan emin olun.
- Yeni bir sistem oluşturmak için "Google Cloud Platform'a ABAP Platform Deneme Sürümü'nü ve ABAP SDK'sını Yükleme" kod laboratuvarına başvurabilirsiniz.
- Google Cloud projenizde "ABAP SDK'sını kullanarak SAP'ten Pub/Sub'a etkinlik gönderme" Codelab'i kapsamında
PUBSUB_DEMO_TOPIC
konusunu oluşturdunuz. Oluşturulmadıysa aynısını 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 kurmak için "Abone" izinlerine sahip bir hizmet hesabı.
- Pub/Sub konunuzdan mesajları alıp 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 SAP GUI (Windows veya Java) yüklü olmalıdır. SAP GUI dizüstü bilgisayarınızda zaten yüklüyse uygulama sunucusu IP'si olarak sanal makinenin harici IP adresini kullanarak SAP'e 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 projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğ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 komutlardaki 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" kod laboratuvarının 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 almayla sınırlayarak 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"
- Ardından, 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 atanan rolle birlikte listelenir.
5. Pull aboneliklerini anlama
Alma aboneliğinde SAP sisteminiz abone istemcisi gibi davranır ve mesajları almak için bir Pub/Sub sunucusuna istek gönderir. Abone istemcisi, REST Pull API'yi kullanır.
Temel API yöntemleri
Google Cloud Pub/Sub API
- pull: Mesaj getirme isteği başlatır.
- acknowledge: Pub/Sub'a bir mesajın başarıyla işlendiğini bildirir.
Google Cloud Eşdeğerlerine Yönelik ABAP SDK'sı
- /GOOG/CL_PUBSUB_V1 -> PULL_SUBSCRIPTIONS
- /GOOG/CL_PUBSUB_V1 -> ACKNOWLEDGE_SUBSCRIPTIONS
Alma aboneliği için mesaj akışı
Aşağıdaki resimde, abone istemcisi ile alma aboneliği arasındaki iş akışı gösterilmektedir.
- Alma İsteği: SAP sisteminiz (abone), Pub/Sub sunucusundan mesaj istemek için alma yöntemini kullanır.
- Çekme Yanıtı: Pub/Sub sunucusu sıfır veya daha fazla mesaj ve onay kimliğiyle yanıt verir. Mesaj içermeyen veya hata içeren bir yanıt, alınabilecek mesaj olmadığı anlamına gelmez. Bu yanıt, resimde gösterilen PullResponse'dir.
- Onay: SAP sisteminiz, bir ileti işlendikten sonra alınan onay kimliğiyle birlikte onay yöntemini kullanır. Bu, Pub/Sub'ın iletiyi yeniden yayınlamasını engeller.
6. Aboneliğinizi ayarlama ve mesaj gönderme
Alma aboneliği oluşturma
PUBSUB_DEMO_TOPIC
adlı bir alma aboneliği oluşturmak için aşağıdaki gcloud komutunu çalıştırın. Bu abonelik,PUBSUB_DEMO_TOPIC
kaynağından mesaj alır:PUBSUB_DEMO_SUBSCRIPTION
gcloud pubsub subscriptions create PUBSUB_DEMO_SUBSCRIPTION \
--topic=PUBSUB_DEMO_TOPIC
Mesaj yayınlama
PUBSUB_DEMO_TOPIC
'e 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 bunu 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 göz atı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ındaki ön koşulları ayarladığınıza göre SAP tarafında yapılandırma işlemine geçebiliriz.
Google Cloud için ABAP SDK'sı, kimlik doğrulama ve bağlantıyla ilgili yapılandırma için /GOOG/CLIENT_KEY
ve /GOOG/SERVIC_MAP.
tablolarını kullanır.
/GOOG/CLIENT_KEY
tablosundaki yapılandırmayı korumak için aşağıdaki adımları uygulayın:
- SAP GUI'ye SPRO işlem kodunu girin.
- SAP Reference IMG'yi (SAP Referans IMG'si) tıklayın.
- Google Cloud için ABAP SDK'sı > Temel Ayarlar > İstemci Anahtarını Yapılandır'ı tıklayın.
- Alanlarda 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 ABAP raporu oluşturma
- SAP sisteminize giriş yapın.
SE38
işlem koduna gidin veZDEMO_RECEIVE_CPS_EVENTS.
adlı bir rapor programı oluşturun- Açılan pop-up'ta aşağıda gösterildiği gibi ayrıntıları girin ve Kaydet'i tıklayın.
- Sonraki pop-up'ta Yerel Nesne'yi seçin veya uygun bir paket adı girin.
- ABAP Düzenleyici'ye 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ütme işleminde, rapor çıkışını aşağıdaki gibi görürsünüz:
9. ABAP Pub/Sub abone kodu açıklaması
Özünde bu ABAP programı, mesaj abonesi olarak Google Cloud Pub/Sub ile entegre olur. Belirtilen bir abonelikte yeni mesaj olup olmadığını kontrol eder, bunları işler ve daha sonra gelecekte yeniden teslim edilmesini önlemek için alındığını onaylar.
Program aşağıdaki işlemleri gerçekleştirir:
Adım adım döküm
Bağlantı kurma:
/GOOG/CL_PUBSUB_V1
sınıfını kullanarak Google Cloud Pub/Sub hizmetine HTTP bağlantısı oluşturur.
Parametreleri ayarlama:
- Proje kimliği: Pub/Sub aboneliğinin bulunduğu ilgili proje kimliğini ayıklayın.
- Abonelik Adı: İletilerin alınacağı aboneliğin adını belirtir (
PUBSUB_DEMO_SUBSCRIPTION
). - Mesaj Sınırı: Tek bir API çağrısında alınabilecek maksimum mesaj sayısını (bu durumda 1) belirler.
Mesajları Getir:
- Belirtilen abonelikten mesaj almak için
pull_subscriptions
yöntemini çağırır.
Alınan Mesajları İşleme:
- Mesaj varsa program verilerin kodunu çözer, içeriği günlüğe kaydeder ve bir onay gönderir.
Mesajları Onaylama:
- Mesajların başarıyla alındığını belirten bir onay mesajı göndermek için
acknowledge_subscriptions
yöntemini çağırır. Bu, bunların yeniden yayınlanmasını engeller.
Başarılı/hatalı işlemleri işleme:
- İletiler alınıp onaylanırsa başarı mesajları sağlar ve çeşitli başarısızlık senaryoları (ileti alınmadı, API hataları vb.) için hata mesajları gösterir.
Bağlantıyı Kapat:
- Pub/Sub hizmetine yönelik 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 bir köprü oluşturdunuz. Codelab'i tamamlamanız, etkinlik odaklı mesajlaşmayı ve Google Cloud hizmetlerine entegre etmek için Google Cloud için ABAP SDK'sının nasıl kullanılacağını iyi anladığınızı gösterir. Tebrikler!
ABAP ile Google Cloud Hizmetleri arasında yeni bir entegrasyon düzeyine ulaştınız. Bu heyecan verici seçeneklerle ufkunuzu genişletin:
- Google Cloud için ABAP SDK'sı ile Translation API'yi kullanma
- Parçalara ayırma özelliğini kullanarak büyük bir nesneyi Cloud Storage paketine yükleme
- Google Cloud için ABAP SDK'sı ile Secret Manager'dan Kimlik Bilgileri/Gizli Anahtarlar Alma
- ABAP'den Vertex AI test-bison'u çağırma
- ABAP'den BigQuery ML'yi çağırma
11. Temizleme
Google Cloud için ABAP SDK'sıyla ilgili ek kod laboratuvarlarına devam etmek istemiyorsanız lütfen temizleme işlemine devam edin.
Projeyi silme
- Google Cloud projesini silin:
gcloud projects delete abap-sdk-poc
Kaynakları tek tek silme
- Hesaplama ö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