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

Parçalara ayırarak Cloud Storage'a dosya yükleme

Bu codelab hakkında

subjectSon güncelleme Eyl 4, 2024
account_circleYazan: Satish Inamdar

1. Giriş

Bu kod laboratuvarında, bir hizmet hesabı oluşturma ve bunu Google Cloud için ABAP SDK'sı tarafından sağlanan istemci anahtarı ve iletişim haritası tablosunu yapılandırmak ve ABAP'da Cloud Storage JSON API'yi çağırmak için kullanma adımlarını listeledik.

Bu kod laboratuvarında 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 belirli API'ler ve hizmetler 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'sını kullanarak SAP sisteminizde aşağıdaki programları oluşturacaksınız:

  • Cloud Storage paketi oluşturun.
  • Uygulama sunucusundan bir dosya okuyup 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 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

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 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
  • Google Cloud için ABAP SDK'sı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'a ABAP Platform Trial 1909'u ve Google Cloud için ABAP SDK'sını yükleme) ve 2. codelab'i (Compute Engine sanal makinesinde barındırılan SAP için jetonları kullanarak ABAP SDK kimlik doğrulamasını yapılandırma) tamamlamanız gerekir.
  • 1. ve 2. codelab'i tamamladıysanız kimlik doğrulama ve bağlantı için gerekli kurulumla birlikte Google Cloud'da bir ABAP Platform Trial 1909 sistemi sağlanmış olur.
  • 1. ve 2. codelab'i tamamlamadıysanız bu codelab'de verilen adımları gerçekleştirmek için gerekli tüm altyapıya ve bağlantıya sahip olmazsınız. Bu nedenle, bu codelab'e devam etmeden önce 1. ve 2. codelab'i tamamlamanız gerekir.

4. Depolama Nesnesi Kullanıcı 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. 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-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ı, aşağıda gösterildiği gibi kendisine atanan rolle birlikte listelenir:

92d75ce1554efb69.png

5. İ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 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 (SAP Referans IMG'si) tıklayın.
  3. Google Cloud için ABAP SDK'sı > 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'da Paket Oluşturmak İçin Z Raporu Oluşturma

  1. SAP sisteminize giriş yapın.
  2. SE38 işlem koduna gidin ve ZDEMO_CREATE_BUCKET. adlı bir rapor programı oluşturun
  3. Açılan pop-up'ta aşağıdaki gibi ayrıntıları sağlayın:

93f3edb7bbb5c3c4.png

Sonraki pop-up'ta Yerel Nesne'yi seçin veya tercihinize göre bir paket adı girin.

  1. ABAP Düzenleyici'ye 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ı dünya genelinde benzersiz değilse paketin oluşturulmayacağını 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ütme işleminde, rapor çıkışını aşağıdaki gibi görürsünüz:

ff232fba9a4178fb.png

7. Uygulama Sunucusundan Dosya Okumak ve Cloud Storage Paketine Yüklemek İç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üklenen 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 dizinindeki Uygulama Sunucusu'na zaten yüklenmiş olan yaklaşık 40 MB boyutunda bir metin dosyası kullanıyoruz.

Bu klasörü aşağıdaki bağlantıyı kullanarak GitHub'dan da indirebilirsiniz: Örnek Dosya

  1. SAP sisteminize giriş yapın
  2. SE38 işlem koduna gidin ve ZDEMO_UPLOAD_FILE. adlı bir rapor programı oluşturun
  3. Açılan pop-up'ta aşağıdaki gibi ayrıntıları sağlayın:

19cbe6987bba58e4.png

Sonraki pop-up'ta Yerel Nesne'yi seçin veya tercihinize göre bir paket adı girin.

  1. ABAP Düzenleyici'ye 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ütme işleminde, rapor çıkışını aşağıdaki gibi görürsünüz:

c982bfcd07d7e487.png

Aşağıda gösterildiği gibi Cloud Storage paketinize giderek dosyanın başarıyla yüklenip yüklenmediğini doğrulayabilirsiniz.

90678b475e165adf.png

1886be610c63ed6b.png

8. ABAP SDK kodunu kullanarak Cloud Storage&#39;a dosya yükleme

Özünde 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 paketine yüklemek için Storage API'nin API istemci stub'ına iletir.

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

Adım adım döküm

Bağlantı kurma:

  • /GOOG/CL_STORAGE_V1 sınıfını kullanarak Google Storage hizmetine bir HTTP bağlantısı kurar.

Dosya Verilerini Okuma

  • OPEN DATASET yaparak uygulama sunucusunda 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.

Yaygın Sorgu Parametreleri Ekleme

  • Parçalara ayırma işlemini gerçekleştirmek için seçmemiz gereken yükleme türü "Devam ettirilebilir" yüklemedir. Devam ettirilebilir yükleme seçildiğinde dosya verileri varsayılan olarak 8 MB'lık parçalara bölünür ve yüklenir. Ancak geliştiriciler IV_P_CHUNK_SIZE parametresini ayarlayarak bu parça boyutunu değiştirebilir. Bununla birlikte, varsayılan ayarın kullanılması önerilir.
  • API yöntemine "Devam ettirilebilir" yükleme seçeneğinin seçilmesi 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üklenmesi gereken paket adı
  • IS_DATA: Yüklenmesi gereken dosya verileri
  • IV_CONTENT_TYPE: Dosyanın İçerik Türü. Mevcut senaryomuzda bir metin dosyası yüklediğimiz için "text/plain" değerini kullanıyoruz.

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

Başarılı/hatalı işlemleri iş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ı Kapat:

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

9. Tebrikler

Tebrikler! "Cloud Storage Paketine Dosya Yükleme" Codelab'i başarıyla tamamladınız.

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

Google Cloud Storage, büyük miktarda veri depolamak ve yönetmek için mükemmel bir seçenektir. Ç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 kullanımı kolaydır.
  • Esneklik: Google Cloud Storage, çeşitli uygulamalar ve platformlarla kullanılabilir.

Çeşitli Google Cloud hizmetlerine erişmek için ABAP SDK'yı kullanmayla ilgili öğrenme yolculuğunuza devam etmek üzere aşağıdaki codelab'e geçebilirsiniz.

  • Pub/Sub'a etkinlik gönderme
  • Cloud Pub/Sub'dan etkinlik alma
  • Metinleri çevirmek için Cloud Translation API'yi kullanma
  • Kimliği tanımlayabilecek bilgileri çıkarmak için DLP API'yi kullanma
  • ABAP'den BigQuery ML'yi çağırma

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

  1. Hesaplama ö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