Parçalama ile Cloud Storage'a dosya yükleme

1. Giriş

Bu codelab'de, hizmet hesabı oluşturma ve bunu Google Cloud için ABAP SDK tarafından sağlanan istemci anahtarı ve iletişim haritası tablosunu yapılandırmak ve ABAP'ta Cloud Storage JSON API'yi çağırmak için kullanma adımları listelenmiştir.

Bu codelab'de aşağıdaki Google Cloud hizmetleri kullanılmaktadır:

  • Compute Engine
  • Ağ Hizmetleri
  • Cloud Shell
  • Cloud Storage JSON API V1

Not: Yeni bir Google Cloud projesi oluşturduğunuzda Cloud Storage dahil olmak üzere belirli bir API ve hizmet grubu otomatik olarak etkinleştirilir. Bu sayede, bu güçlü depolama çözümünden hemen yararlanabilirsiniz. Bu nedenle, ek bir adım olarak etkinleştirmeniz gerekmez.

Ön koşullar

Ne oluşturacaksınız?

Google Cloud için ABAP SDK'yı kullanarak SAP sisteminizde aşağıdaki programları oluşturacaksınız.

  • Cloud Storage paketi oluşturun.
  • Uygulama sunucusundan bir dosyayı okuyun ve oluşturulan Cloud Storage paketine yükleyin.

2. Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • 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

6757b2fb50ddcc2d.png

  • 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 olarak us-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
  • Google Cloud için ABAP SDK'nın yüklü olduğu bir SAP sistemine erişiminiz olmalıdır.
  • Bu codelab'e devam etmeden önce 1. codelab'i (Google Cloud Platform'da ABAP Platform Trial 1909'u ve Google Cloud için ABAP SDK'yı yükleme) ve 2. codelab'i (Compute Engine sanal makinesinde barındırılan SAP için jeton tabanlı ABAP SDK kimlik doğrulamasını yapılandırma) tamamlamanız gerekir.
  • 1. ve 2. codelab'i tamamladıysanız bu codelab'ler, Google Cloud'da ABAP Platform Trial 1909 System'i ve kimlik doğrulama ile bağlantı için gerekli kurulumu sağlamış olmalıdır.
  • 1. ve 2. codelab'i tamamlamadıysanız bu codelab'de verilen adımları uygulamak için gerekli tüm altyapı ve bağlantıya sahip olmazsınız. Bu nedenle, bu codelab'e devam etmeden önce codelab 1 ve codelab 2'yi tamamlamanız gerekir.

4. Depolama Nesnesi Kullanıcısı rolüne sahip bir hizmet hesabı oluşturma

Gerekli role sahip bir hizmet hesabı oluşturmak için aşağıdaki adımları uygulayın:

  1. Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
  1. Ş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-storage-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/storage.objectUser'

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.

  1. Rolün eklendiğini doğrulamak için IAM sayfasına gidin. Oluşturduğunuz hizmet hesabı, kendisine atanmış rol ile birlikte aşağıda gösterildiği gibi listelenmelidir:

92d75ce1554efb69.png

5. İ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 tablosunu kullanır.

/GOOG/CLIENT_KEY tablosundaki yapılandırmayı korumak için aşağıdaki adımları uygulayın:

  1. SAP GUI'de SPRO işlem kodunu girin.
  2. SAP Reference IMG'yi tıklayın.
  3. ABAP SDK for Google Cloud > Basic Settings > Configure Client Key'i (Google Cloud için ABAP SDK > Temel Ayarlar > İstemci Anahtarını Yapılandır) tıklayın.
  4. Alanlarda aşağıdaki değerleri koruyun:

Alan

Değer

Google Cloud Anahtar Adı

TEST_STORAGE

Google Cloud hizmet hesabı adı

abap-sdk-storage-tester@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

Diğer tüm alanları boş bırakın.

6. Cloud Storage'de Paket Oluşturmak İçin Z-Raporu Oluşturma

  1. SAP sisteminize giriş yapın.
  2. İşlem koduna SE38 gidin ve ZDEMO_CREATE_BUCKET. adlı bir rapor programı oluşturun.
  3. Açılan pop-up pencerede, aşağıdaki şekilde gösterildiği gibi ayrıntıları girin:

93f3edb7bbb5c3c4.png

Bir sonraki pop-up pencerede, tercihinize göre Yerel Nesne'yi seçin veya bir paket adı girin.

  1. ABAP düzenleyicisinde aşağıdaki kodu ekleyin:
DATA lv_json_response TYPE string.
DATA ls_input         TYPE /goog/cl_storage_v1=>ty_001.
DATA lo_storage       TYPE REF TO /goog/cl_storage_v1.

TRY.

    lo_storage = NEW #( iv_key_name = 'TEST_STORAGE' ).
        
        " Bucket Name should be globally unique & permanent
    ls_input = VALUE #( name = 'newtest_bucket_abapsdk_gcloud001' ).  
    lo_storage->insert_buckets
                ( EXPORTING iv_q_project = CONV #( lo_storage->gv_project_id )
                    is_input     = ls_input
          IMPORTING es_raw       = lv_json_response
                    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_storage->is_success( lv_ret_code ) = abap_true.
      cl_demo_output=>new(
        )->begin_section( 'Result:'
        )->write_text( 'Bucket was created:'
        )->next_section( 'JSON Response:'
        )->write_json( lv_json_response
        )->display( ).

    ELSE.
      DATA(lv_msg) = lv_ret_code && ':' && lv_err_text.
      cl_demo_output=>new(
        )->begin_section( 'Result:'
        )->write_text( 'Bucket creation failed;'
        )->next_section( 'Error:'
        )->write_json( lv_msg
        )->display( ).
    ENDIF.

  CATCH /goog/cx_sdk INTO DATA(lo_sdk_excp).
    lv_msg = lo_sdk_excp->get_text( ).
    MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
 

Paket adı genel olarak benzersiz değilse paketin oluşturulmayacağını lütfen unutmayın. Bu nedenle, kodu yürütmeden önce paket için benzersiz bir ad kullanmayı deneyin.

  1. Raporu kaydedip etkinleştirin.
  2. Raporu çalıştırın (F8 tuşuna basın).

Başarılı bir yürütmenin ardından rapor çıkışını aşağıdaki gibi görmeniz gerekir:

ff232fba9a4178fb.png

7. Uygulama sunucusundan dosya okumak ve dosyayı Cloud Storage paketine yüklemek için Z-Raporu oluşturma

Bu etkinliği gerçekleştirmeden önce büyük bir metin dosyası hazırlamanız gerekir. Burada, uygulama sunucumuza oluşturulup yüklenmiş büyük bir metin dosyamız var. SAP sisteminizin uygulama sunucusuna dosya yüklemek için CG3Z işlem kodunu kullanabilirsiniz.

Bu örnekte, /tmp dizininde Uygulama Sunucusu'na yüklenmiş olan yaklaşık 40 MB boyutunda bir metin dosyası kullanıyoruz.

Bu klasörü GitHub'dan da indirebilirsiniz: Örnek Dosya

  1. SAP sisteminize giriş yapın.
  2. İşlem koduna SE38 gidin ve ZDEMO_UPLOAD_FILE. adlı bir rapor programı oluşturun.
  3. Açılan pop-up pencerede, aşağıdaki şekilde gösterildiği gibi ayrıntıları girin:

19cbe6987bba58e4.png

Bir sonraki pop-up pencerede, tercihinize göre Yerel Nesne'yi seçin veya bir paket adı girin.

  1. ABAP düzenleyicisinde aşağıdaki kodu ekleyin:
DATA lv_file_length TYPE i.
DATA lv_msg         TYPE string.
DATA lv_dset        TYPE string.
DATA lv_data        TYPE string.
DATA ls_data        TYPE xstring.
DATA lo_storage     TYPE REF TO /goog/cl_storage_v1.

" Read file data from the application server
DATA(dset) = '/tmp/sample_file.txt'.
OPEN DATASET dset FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
  MESSAGE 'Cannot opening/reading dataset' TYPE 'E'.
ENDIF.
DO.
  READ DATASET dset INTO lv_dset.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CONCATENATE lv_data lv_dset INTO lv_data SEPARATED BY cl_abap_char_utilities=>newline.
  CLEAR lv_dset.

ENDDO.

CLOSE DATASET dset.

CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  EXPORTING  text   = lv_data
  IMPORTING  buffer = ls_data
  EXCEPTIONS failed = 1
             OTHERS = 2.
IF sy-subrc <> 0.
  MESSAGE 'Conversion from string to xstring failed' TYPE 'E'.
ENDIF.

TRY.

    lo_storage = NEW #( iv_key_name = 'DEMO_STORAGE' ).

    lo_storage->add_common_qparam( iv_name = 'uploadType' iv_value = 'resumable' ).

    lo_storage->insert_objects( EXPORTING iv_q_name       = 'large_text_file_demo.txt'
                                          iv_p_bucket     = 'newtest_bucket_abapsdk_gcloud001'
                                          is_data         = ls_data
                                          iv_content_type = 'text/pdf'
                                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_storage->is_success( lv_ret_code ) = abap_true.
      cl_demo_output=>new(
        )->begin_section( 'Result:'
        )->write_text( 'Object was uploaded successfully'
        )->write_text( 'Object Self Link:'
        )->write_text( ls_output-self_link
        )->display( ).
    ELSE.
      cl_demo_output=>new(
        )->begin_section( 'Error:'
        )->write_text( lv_msg
        )->display( ).
    ENDIF.
  CATCH /goog/cx_sdk INTO data(lo_sdk_excp).
    lv_msg = lo_sdk_excp->get_text( ).
    MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
ENDTRY.

lo_storage->close( ).
  1. Raporu kaydedip etkinleştirin.
  2. Raporu çalıştırın (F8 tuşuna basın).

Başarılı bir yürütmenin ardından rapor çıkışını aşağıdaki gibi görmeniz gerekir:

c982bfcd07d7e487.png

Dosyanın başarıyla yüklenip yüklenmediğini doğrulamak için Cloud Storage paketinize aşağıdaki şekilde gidin.

90678b475e165adf.png1886be610c63ed6b.png

8. ABAP SDK kodu açıklanarak Cloud Storage'a dosya yükleme

Bu ABAP programı, Google Cloud Storage ile entegre olur. Uygulama sunucusundan bir dosya okur ve dosya verilerini, önceki rapor programında oluşturulan bir depolama paketi için yüklemek üzere Storage API'nin API istemci kaba koduna iletir.

Dosya yüklemek için oluşturduğunuz rapor programı şunları yapar:

Adım Adım Döküm

Bağlantı Kurma:

  • /GOOG/CL_STORAGE_V1 sınıfını kullanarak Google Storage hizmetiyle bir HTTP bağlantısı oluşturur.

Dosya Verilerini Okuma

  • OPEN DATASET işlemi yaparak uygulama sunucusundaki dosyayı okur ve ardından XSTRING biçimine dönüştürmek için standart SAP işlev modülü SCMS_STRING_TO_XSTRING'yi çağırır.

Ortak Sorgu Parametreleri Ekleme

  • Parçalama işlemini gerçekleştirmek için "Devam ettirilebilir" yükleme türünü seçmemiz gerekir. Devam ettirilebilir yükleme varsayılan olarak seçildiğinde dosya verileri 8 MB'lık parçalara bölünür ve yüklenir. Ancak geliştiriciler, IV_P_CHUNK_SIZE parametresini ayarlayarak bu parçalama boyutunu değiştirebilir. Bununla birlikte, varsayılan ayarın kullanılması önerilir.
  • API yöntemine "Devam ettirilebilir" yükleme seçeneğinin belirlenmesi gerektiğini bildirmek için ADD_COMMON_QPARAM yöntemini çağırır ve uploadType değerini resumable. olarak iletiriz.

Nesne Ekleme

  • Aşağıdaki parametreleri ileterek INSERT_OBJECTS yöntemini çağırır:
  • IV_Q_NAME: İçeriğin Cloud Storage'da depolanacağı dosya adı
  • IV_P_BUCKET: Dosyanın yükleneceği paket adı
  • IS_DATA: Yüklenmesi gereken dosya verileri
  • IV_CONTENT_TYPE: Dosyanın içerik türü. Mevcut senaryomuzda bir metin dosyası yüklediğimiz için "text/plain" kullanıyoruz.

İçe aktarma parametresine IV_CHUNK_SIZE herhangi bir değer iletmediğimizi ve API istemci saplamasının bu parametreyle ilişkili varsayılan değeri (8 MB) kullanmasına izin verdiğimizi unutmayın.

Başarıları/Hataları İşleme:

  • API çağrısının başarılı olup olmadığına bağlı olarak API yanıtını gösterir.

Bağlantıyı Kapatma:

  • Depolama Hizmeti'ne HTTP bağlantısını kapatır.

9. Tebrikler

Tebrikler! "Cloud Storage Paketine Dosya Yükleme" Codelab'ini başarıyla tamamlamış olmanız gerekir.

Cloud Storage JSON API'nin birçok özelliği vardır ve Google Cloud için ABAP SDK ile bu özelliklere doğrudan SAP sistemlerinizde ABAP kullanarak yerel olarak erişebilirsiniz.

Google Cloud Storage, büyük miktarda veriyi depolamak ve yönetmek için mükemmel bir seçenektir. Çok çeşitli işletmeler, kuruluşlar ve uygulamalar tarafından kullanılır.

Google Cloud Storage'ı kullanmanın avantajlarından bazıları:

  • Uygun maliyet: Google Cloud Storage, büyük miktarda veriyi depolamak ve yönetmek için uygun maliyetli bir yöntemdir.
  • Basitlik: Google Cloud Storage, basit ve sezgisel bir API ile kolayca kullanılabilir.
  • Esneklik: Google Cloud Storage, çeşitli uygulama ve platformlarla kullanılabilir.

Artık çeşitli Google Cloud hizmetlerine erişmek için ABAP SDK'yı kullanma konusundaki öğrenme yolculuğunuza devam etmek üzere aşağıdaki codelab'i inceleyebilirsiniz.

  • Pub/Sub'a etkinlik gönderme
  • Cloud Pub/Sub'dan etkinlik alma
  • Metinleri çevirmek için Cloud Translation API'yi kullanma
  • Kişisel olarak tanımlanabilir bilgilerin çıkarılması için DLP API'sini kullanma
  • ABAP'tan BigQuery ML'yi çağırma

10. 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

Tek tek kaynakları silme

  1. Compute örneğini silin:
gcloud compute instances delete abap-trial-docker
  1. Güvenlik duvarı kurallarını silin:
gcloud compute firewall-rules delete sapmachine
  1. Hizmet hesabını silin:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com