1. Giriş
Bu kod laboratuvarında, Google Cloud için ABAP SDK'sını kullanarak bir etkinliği Google Cloud Pub/Sub API'ye yayınlama adımlarını listeledik.
Bu kod laboratuvarında aşağıdaki Google Cloud hizmetleri kullanılmaktadır:
- Pub/Sub
- Cloud Shell
Ne oluşturacaksınız?
Aşağıdakileri öğreneceksiniz:
- Google Cloud projesinde Pub/Sub'u etkinleştirin.
- Pub/Sub konusu oluşturun.
- Mesaj yayınlama
2. Başlamadan önce
- Sisteminize Google Cloud için ABAP SDK'yı yüklemiş olmanız gerekir. Yeni bir sistem kurmak için Google Cloud Platform'a ABAP deneme sürümünü yükleme kod laboratuvarına başvurabilirsiniz.
- Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanırsı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
3. Genel Bakış
Bu kod laboratuvarının kapsamı, Pub/Sub hizmetinin aşağıdaki bileşenlerini içerir:
- Yayıncı (üretici olarak da bilinir): Mesajlar oluşturur ve bunları belirli bir konuda mesajlaşma hizmetine gönderir (yayınlar).
- Mesaj: Mesajlaşma hizmetinde taşınan veriler.
- Konu: Mesaj feed'ini temsil eden adlandırılmış bir öğedir.
4. Pub/Sub hizmetini ayarlama
- Gerekli role sahip bir hizmet hesabı oluşturmak için Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- Pub/Sub API'yi hizmet hesabınızda (
abap-sdk-poc
) etkinleştirmek için Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
gcloud services enable pubsub.googleapis.com
- Konu oluşturabilmek için hizmet hesabına pubsub.topics.create IAM rolünü verin. Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
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'
- Konuya mesaj yayınlayabilmek için hizmet hesabına pubsub.topics.publish IAM rolünü verin. Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
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'
- Rollerin eklendiğini doğrulamak için IAM sayfasına gidin. Oluşturduğunuz hizmet hesabı, kendisine atanan rollerle birlikte listelenir.
5. İstemci anahtarını yapılandırma
/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.
- Yeni Girişler'i tıklayın.
- Aşağıdaki alanlar için değerler girin:
Alan | Açıklama |
Google Cloud Anahtar Adı | PUBSUB_DEMO |
Google Cloud Hizmet Hesabı Adı | abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud Kapsamı | https://www.googleapis.com/auth/cloud-platform |
Google Cloud Proje Tanımlayıcısı | abap-sdk-poc |
Yetkilendirme Sınıfı | /GOOG/CL_AUTH_GOOGLE |
Diğer alanları boş bırakın
6. Konu oluşturma
/GOOG/CL_PUBSUB_V1 API stub'ının CREATE_TOPICS yöntemini kullanarak bir konu oluşturursunuz. Yöntemin imzası:
- SAP GUI'de SE38 işlem kodunu girin.
- ZPUBSUB_DEMO adlı bir rapor 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:
" 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.
- 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:
7. Konuda mesaj yayınlama
Konu hazır olduğunda artık verileri göndermeye odaklanabiliriz. Bir sonraki adımda, bu konuda nasıl mesaj yayınlayacağınızı öğrenelim. Mesajlar, /GOOG/CL_PUBSUB_V1
API stub'ının PUBLISH_TOPICS
yöntemi kullanılarak konuya yayınlanır.
Yöntemin imzası:
- SAP GUI'de SE38 işlem kodunu girin.
- ZPUBSUB_DEMO_PUBLISH adlı bir rapor 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:
" 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.
- 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:
8. Tebrikler
Tebrikler! Google Cloud için ABAP SDK'sını kullanarak Google Cloud Platform'un Pub/Sub API'sinde başarıyla bir mesaj yayınladınız.
Çeşitli Google Cloud hizmetlerine erişmek için ABAP SDK'sını kullanmayla ilgili öğrenme yolculuğunuza devam etmek üzere aşağıdaki codelab'e geçebilirsiniz.
- Cloud Pub/Sub'dan etkinlik alma
- Parçalara ayırarak Cloud Storage paketine dosya yükleme
- ABAP'den Vertex AI test-bison'u çağırma
- . . .
9. 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-dev@abap-sdk-poc.iam.gserviceaccount.com