Mengupload file ke Cloud Storage dengan pemotongan

Mengupload file ke Cloud Storage dengan chunking

Tentang codelab ini

subjectTerakhir diperbarui Sep 4, 2024
account_circleDitulis oleh Satish Inamdar

1. Pengantar

Dalam codelab ini, kami telah mencantumkan langkah-langkah untuk membuat akun layanan dan menggunakannya untuk mengonfigurasi tabel Kunci Klien dan Peta Komunikasi yang disediakan oleh ABAP SDK untuk Google Cloud dan memanggil Cloud Storage JSON API di ABAP.

Layanan Google Cloud berikut digunakan dalam codelab ini:

  • Compute Engine
  • Layanan Jaringan
  • Cloud Shell
  • Cloud Storage JSON API V1

Catatan: Saat Anda membuat Project Google Cloud baru, serangkaian API dan layanan tertentu, termasuk Cloud Storage, akan otomatis diaktifkan. Hal ini memastikan bahwa Anda dapat segera memanfaatkan solusi penyimpanan yang andal ini. Oleh karena itu, Anda tidak perlu mengaktifkannya sebagai langkah tambahan.

Prasyarat

Yang akan Anda build

Anda akan membuat program berikut di Sistem SAP menggunakan ABAP SDK untuk Google Cloud

  • Buat Bucket Cloud Storage.
  • Baca file dari server aplikasi dan upload ke Bucket Cloud Storage yang dibuat.

2. Persyaratan

  • Browser, seperti Chrome atau Firefox.
  • Project Google Cloud dengan penagihan diaktifkan atau Buat akun Uji Coba Gratis 90 Hari untuk Google Cloud Platform.
  • SAP GUI (Windows atau Java) yang diinstal di sistem Anda. Jika SAP GUI sudah diinstal di laptop, hubungkan ke SAP menggunakan alamat IP eksternal VM sebagai IP Server Aplikasi. Jika menggunakan Mac, Anda juga dapat menginstal SAP GUI untuk Java yang tersedia di link ini.

3. Sebelum memulai

6757b2fb50ddcc2d.png

  • Jalankan perintah berikut untuk melakukan autentikasi untuk akun Anda dan menetapkan project default ke abap-sdk-poc. Zona us-west4-b digunakan sebagai contoh. Jika diperlukan, ubah project dan zona dalam perintah berikut berdasarkan preferensi Anda.
gcloud auth login
gcloud config
set project abap-sdk-poc
gcloud config
set compute/zone us-west4-b
  • Anda harus memiliki akses ke sistem SAP yang telah menginstal ABAP SDK untuk Google Cloud.
  • Anda harus menyelesaikan codelab 1 (Menginstal Uji Coba Platform ABAP 1909 di Google Cloud Platform dan Menginstal ABAP SDK untuk Google Cloud) dan codelab 2 (Mengonfigurasi Autentikasi ABAP SDK menggunakan token untuk SAP yang Dihosting di VM Compute Engine) sebelum melanjutkan dengan codelab ini.
  • Jika Anda telah menyelesaikan codelab 1 dan codelab 2, Anda akan mendapatkan Sistem Uji Coba Platform ABAP 1909 di Google Cloud, beserta penyiapan yang diperlukan untuk autentikasi dan konektivitas.
  • Jika belum menyelesaikan codelab 1 dan codelab 2, Anda tidak akan memiliki semua infrastruktur dan konektivitas yang diperlukan untuk melakukan langkah-langkah yang diberikan dalam codelab ini. Oleh karena itu, Anda harus menyelesaikan codelab 1 dan codelab 2 sebelum melanjutkan codelab ini.

4. Membuat Akun Layanan dengan Peran Pengguna Objek Penyimpanan

Untuk membuat akun layanan dengan peran yang diperlukan, lakukan langkah-langkah berikut:

  1. Jalankan perintah berikut di terminal Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
  1. Sekarang, tambahkan peran yang diperlukan ke akun layanan yang dibuat pada langkah di atas:
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'

Perintah di atas menggunakan abap-sdk-poc sebagai placeholder untuk Project Google Cloud. Ganti abap-sdk-poc dengan project ID Anda.

  1. Untuk memverifikasi bahwa peran telah ditambahkan, buka halaman IAM. Akun layanan yang Anda buat akan tercantum beserta peran yang telah ditetapkan seperti yang ditunjukkan di bawah ini:

92d75ce1554efb69.png

5. Membuat Konfigurasi Kunci Klien

Setelah Anda menyiapkan prasyarat di sisi Google Cloud, kita dapat melanjutkan konfigurasi di sisi SAP.

Untuk konfigurasi terkait autentikasi dan konektivitas, ABAP SDK untuk Google Cloud menggunakan tabel /GOOG/CLIENT_KEY

Untuk mempertahankan konfigurasi di tabel /GOOG/CLIENT_KEY, lakukan langkah-langkah berikut:

  1. Di SAP GUI, masukkan kode transaksi SPRO.
  2. Klik IMG Referensi SAP.
  3. Klik ABAP SDK for Google Cloud > Basic Settings > Configure Client Key.
  4. Pertahankan nilai berikut terhadap kolom:

Kolom

Nilai

Google Cloud Key Name

TEST_STORAGE

Nama Akun Layanan Google Cloud

abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud Scope

https://www.googleapis.com/auth/cloud-platform

ID Project

abap-sdk-poc

Class Otorisasi

/GOOG/CL_AUTH_GOOGLE

Biarkan semua kolom lain kosong

6. Membuat Laporan Z untuk Membuat Bucket di Cloud Storage

  1. Login ke Sistem SAP Anda.
  2. Buka kode transaksi SE38 dan buat Program Laporan dengan nama ZDEMO_CREATE_BUCKET.
  3. Di pop-up yang terbuka, berikan detail seperti yang ditunjukkan di bawah ini:

93f3edb7bbb5c3c4.png

Di pop-up berikutnya, pilih Objek Lokal atau Berikan nama paket sesuai pilihan Anda.

  1. Di ABAP Editor, tambahkan kode berikut:
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.
 

Perhatikan bahwa jika nama bucket tidak unik secara global, bucket tidak akan dibuat. Oleh karena itu, coba gunakan nama unik untuk bucket sebelum menjalankan kode

  1. Simpan dan aktifkan laporan.
  2. Jalankan laporan (Tekan F8).

Jika berhasil dieksekusi, Anda akan melihat output laporan seperti yang ditunjukkan di bawah ini:

ff232fba9a4178fb.png

7. Membuat Laporan Z untuk Membaca File dari Server Aplikasi dan Menguploadnya ke Bucket Cloud Storage

Sebelum melakukan aktivitas ini, Anda perlu menyiapkan file teks berukuran besar. Di sini, kita sudah memiliki file teks besar yang dibuat dan diupload ke server aplikasi. Anda dapat menggunakan kode transaksi CG3Z untuk mengupload file ke server aplikasi sistem SAP

Untuk contoh ini, kita menggunakan file teks berukuran ~40 MB, yang telah diupload ke Server Aplikasi di direktori /tmp.

Anda juga dapat mendownload folder ini dari GitHub menggunakan link berikut: File Contoh

  1. Login ke Sistem SAP Anda
  2. Buka kode transaksi SE38 dan buat Program Laporan dengan nama ZDEMO_UPLOAD_FILE.
  3. Di pop-up yang terbuka, berikan detail seperti yang ditunjukkan di bawah ini:

19cbe6987bba58e4.png

Di pop-up berikutnya, pilih Objek Lokal atau Berikan nama paket sesuai pilihan Anda.

  1. Di ABAP Editor, tambahkan kode berikut:
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. Simpan dan aktifkan laporan.
  2. Jalankan laporan (Tekan F8).

Jika berhasil dieksekusi, Anda akan melihat output laporan seperti yang ditunjukkan di bawah ini:

c982bfcd07d7e487.png

Anda dapat memverifikasi apakah file berhasil diupload atau tidak dengan membuka Bucket Cloud Storage seperti yang ditunjukkan di bawah ini

90678b475e165adf.png

1886be610c63ed6b.png

8. Penjelasan cara mengupload file ke Cloud Storage menggunakan kode ABAP SDK

Pada dasarnya, program ABAP ini terintegrasi dengan Google Cloud Storage. API ini membaca file dari server aplikasi dan meneruskan data file ke API Client Stub Storage API untuk menguploadnya ke bucket penyimpanan, yang dibuat dalam program laporan sebelumnya.

Program laporan yang telah Anda buat untuk mengupload file melakukan hal berikut:

Perincian Langkah demi Langkah

Membangun Koneksi:

  • Class ini membuat koneksi HTTP ke layanan Google Storage menggunakan class /GOOG/CL_STORAGE_V1.

Membaca Data File

  • Membaca file di server aplikasi dengan melakukan OPEN DATASET, lalu memanggil modul fungsi SAP standar SCMS_STRING_TO_XSTRING untuk dikonversi ke format XSTRING.

Menambahkan Parameter Kueri Umum

  • Untuk melakukan pengelompokan, jenis upload yang perlu kita pilih adalah upload "Dapat Dilanjutkan". Secara default, saat upload yang dapat dilanjutkan dipilih, data file akan dibagi menjadi beberapa bagian berukuran 8 MB dan diupload. Namun, developer dapat mengubah ukuran pengelompokan ini dengan menetapkan parameter IV_P_CHUNK_SIZE, tetapi sebaiknya gunakan setelan default.
  • Agar metode API mengetahui bahwa opsi upload "Dapat dilanjutkan" harus dipilih, kita memanggil metode ADD_COMMON_QPARAM dan meneruskan uploadType sebagai resumable.

Menyisipkan Objek

  • Memanggil metode INSERT_OBJECTS dengan meneruskan parameter berikut ke metode tersebut:
  • IV_Q_NAME: Nama file yang akan digunakan untuk menyimpan konten di Cloud Storage
  • IV_P_BUCKET: Nama bucket tempat file harus diupload
  • IS_DATA: Data file yang perlu diupload
  • IV_CONTENT_TYPE: Jenis Konten file, untuk skenario saat ini, kita menggunakan "text/plain" karena kita mengupload file teks.

Perhatikan bahwa kita tidak meneruskan nilai apa pun ke parameter impor IV_CHUNK_SIZE dan membiarkan API Client Stub menggunakan nilai default yang terkait dengan parameter ini, yaitu 8 MB.

Menangani Keberhasilan/Error:

  • Menampilkan respons API berdasarkan apakah panggilan API berhasil atau tidak.

Tutup Koneksi:

  • Menutup koneksi HTTP ke Layanan Penyimpanan.

9. Selamat

Selamat! Anda telah berhasil menyelesaikan Codelab "Mengupload File ke Bucket Cloud Storage".

Cloud Storage JSON API memiliki banyak kemampuan dan dengan ABAP SDK untuk Google Cloud, Anda dapat mengaksesnya langsung di sistem SAP secara native menggunakan ABAP.

Google Cloud Storage adalah opsi yang tepat untuk menyimpan dan mengelola data dalam jumlah besar. API ini digunakan oleh berbagai bisnis, perusahaan, dan aplikasi.

Beberapa manfaat menggunakan Google Cloud Storage:

  • Hemat biaya: Google Cloud Storage adalah cara hemat biaya untuk menyimpan dan mengelola data dalam jumlah besar.
  • Kesederhanaan: Google Cloud Storage mudah digunakan, dengan API yang sederhana dan intuitif.
  • Fleksibilitas: Google Cloud Storage dapat digunakan dengan berbagai aplikasi dan platform.

Sekarang Anda dapat melanjutkan dengan codelab di bawah untuk melanjutkan perjalanan pembelajaran Anda dalam menggunakan ABAP SDK untuk mengakses berbagai Layanan Google Cloud.

  • Mengirim peristiwa ke Pub/Sub
  • Menerima peristiwa dari Cloud Pub/Sub
  • Menggunakan Cloud Translation API untuk menerjemahkan teks
  • Menggunakan DLP API untuk penyamaran PII
  • Memanggil BigQuery ML dari ABAP

10. Pembersihan

Jika Anda tidak ingin melanjutkan codelab tambahan yang terkait dengan ABAP SDK untuk Google Cloud, lanjutkan pembersihan.

Menghapus project

  • Hapus project Google Cloud:
gcloud projects delete abap-sdk-poc

Menghapus resource satu per satu

  1. Hapus instance komputasi:
gcloud compute instances delete abap-trial-docker
  1. Hapus aturan firewall:
gcloud compute firewall-rules delete sapmachine
  1. Hapus akun layanan:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com