อัปโหลดไฟล์ไปยัง Cloud Storage ด้วยการแบ่งออกเป็นส่วน

อัปโหลดไฟล์ไปยัง Cloud Storage ด้วยการแบ่งไฟล์ออกเป็นหลายส่วน

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ก.ย. 4, 2024
account_circleเขียนโดย Satish Inamdar

1 บทนำ

ในโค้ดแล็บนี้ เราได้แสดงขั้นตอนการสร้างบัญชีบริการและใช้บัญชีดังกล่าวเพื่อกำหนดค่าคีย์ไคลเอ็นต์และตารางแผนที่การสื่อสารที่ ABAP SDK สำหรับ Google Cloud ให้มา รวมถึงเรียกใช้ Cloud Storage JSON API ใน ABAP

บริการ Google Cloud ที่ใช้ในโค้ดแล็บนี้มีดังนี้

  • Compute Engine
  • บริการเครือข่าย
  • Cloud Shell
  • Cloud Storage JSON API V1

หมายเหตุ: เมื่อคุณสร้างโปรเจ็กต์ Google Cloud ใหม่ ระบบจะเปิดใช้ API และบริการชุดหนึ่งๆ โดยอัตโนมัติ ซึ่งรวมถึง Cloud Storage วิธีนี้จะช่วยให้คุณใช้ประโยชน์จากโซลูชันพื้นที่เก็บข้อมูลที่มีประสิทธิภาพนี้ได้ทันที คุณจึงไม่จำเป็นต้องเปิดใช้ในขั้นตอนเพิ่มเติม

ข้อกำหนดเบื้องต้น

สิ่งที่คุณจะสร้าง

คุณจะต้องสร้างโปรแกรมต่อไปนี้ในระบบ SAP โดยใช้ ABAP SDK สําหรับ Google Cloud

  • สร้างที่เก็บข้อมูล Cloud Storage
  • อ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและอัปโหลดไปยังที่เก็บข้อมูล Cloud Storage ที่สร้างขึ้น

2 ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงินหรือสร้างบัญชีทดลองใช้ฟรี 90 วันสำหรับ Google Cloud Platform
  • SAP GUI (Windows หรือ Java) ที่ติดตั้งในระบบ หากติดตั้ง SAP GUI ในแล็ปท็อปอยู่แล้ว ให้เชื่อมต่อกับ SAP โดยใช้ที่อยู่ IP ภายนอกของ VM เป็น IP ของเซิร์ฟเวอร์แอปพลิเคชัน หากใช้ Mac คุณสามารถติดตั้ง SAP GUI for Java ซึ่งมีอยู่ในลิงก์นี้ได้ด้วย

3 ก่อนเริ่มต้น

6757b2fb50ddcc2d.png

  • เรียกใช้คําสั่งต่อไปนี้เพื่อตรวจสอบสิทธิ์สําหรับบัญชีและตั้งค่าโปรเจ็กต์เริ่มต้นเป็น abap-sdk-poc โซน us-west4-b ใช้เพื่อเป็นตัวอย่าง หากจําเป็น โปรดเปลี่ยนโปรเจ็กต์และโซนในคําสั่งต่อไปนี้ตามความต้องการของคุณ
gcloud auth login
gcloud config
set project abap-sdk-poc
gcloud config
set compute/zone us-west4-b
  • คุณต้องมีสิทธิ์เข้าถึงระบบ SAP ที่ติดตั้ง ABAP SDK สําหรับ Google Cloud
  • คุณต้องทํา Codelab 1 (ติดตั้งแพลตฟอร์ม ABAP รุ่นทดลอง 1909 ใน Google Cloud Platform และติดตั้ง ABAP SDK สําหรับ Google Cloud) และ Codelab 2 (กําหนดค่าการตรวจสอบสิทธิ์ ABAP SDK โดยใช้โทเค็นสําหรับ SAP ที่โฮสต์ใน VM ของ Compute Engine) ให้เสร็จสมบูรณ์ก่อนจึงจะดําเนินการต่อใน Codelab นี้ได้
  • หากคุณทำ Codelab 1 และ Codelab 2 เสร็จแล้ว ระบบจะจัดสรรระบบเวอร์ชันทดลอง 1909 ของ ABAP Platform บน Google Cloud ให้คุณ พร้อมกับการตั้งค่าที่จำเป็นสำหรับการตรวจสอบสิทธิ์และการเชื่อมต่อ
  • หากคุณยังไม่ได้ทํา Codelab 1 และ Codelab 2 ให้เสร็จสิ้น คุณจะไม่มีโครงสร้างพื้นฐานและการเชื่อมต่อที่จําเป็นทั้งหมดเพื่อทําตามขั้นตอนที่ระบุไว้ใน Codelab นี้ ดังนั้น คุณต้องทํา Codelab 1 และ Codelab 2 ให้เสร็จก่อนจึงจะทํา Codelab นี้ได้

4 สร้างบัญชีบริการที่มีบทบาทผู้ใช้ออบเจ็กต์พื้นที่เก็บข้อมูล

หากต้องการสร้างบัญชีบริการที่มีบทบาทที่จําเป็น ให้ทําตามขั้นตอนต่อไปนี้

  1. เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
  1. ตอนนี้ให้เพิ่มบทบาทที่จำเป็นลงในบัญชีบริการที่สร้างในขั้นตอนข้างต้น
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'

คำสั่งข้างต้นใช้ abap-sdk-poc เป็นตัวยึดตําแหน่งสำหรับโปรเจ็กต์ Google Cloud แทนที่ abap-sdk-poc ด้วยรหัสโปรเจ็กต์

  1. ไปที่หน้า IAM เพื่อยืนยันว่าได้เพิ่มบทบาทแล้ว บัญชีบริการที่คุณสร้างขึ้นควรแสดงพร้อมกับบทบาทที่กำหนดไว้ดังที่แสดงด้านล่าง

92d75ce1554efb69.png

5 สร้างการกำหนดค่าคีย์ไคลเอ็นต์

ตอนนี้คุณได้ตั้งค่าข้อกําหนดเบื้องต้นในฝั่ง Google Cloud แล้ว เราจึงดําเนินการกําหนดค่าในฝั่ง SAP ต่อได้

สําหรับการกําหนดค่าที่เกี่ยวข้องกับการตรวจสอบสิทธิ์และการเชื่อมต่อ ABAP SDK สําหรับ Google Cloud จะใช้ตาราง /GOOG/CLIENT_KEY

หากต้องการดูแลรักษาการกําหนดค่าในตาราง /GOOG/CLIENT_KEY ให้ทําตามขั้นตอนต่อไปนี้

  1. ใน SAP GUI ให้ป้อนรหัสธุรกรรม SPRO
  2. คลิก SAP Reference IMG
  3. คลิก ABAP SDK สําหรับ Google Cloud > การตั้งค่าพื้นฐาน > กําหนดค่าคีย์ไคลเอ็นต์
  4. คงค่าต่อไปนี้ในช่อง

ช่อง

ค่า

ชื่อคีย์ Google Cloud

TEST_STORAGE

ชื่อบัญชีบริการ Google Cloud

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

ขอบเขต Google Cloud

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

รหัสโปรเจ็กต์

abap-sdk-poc

คลาสการให้สิทธิ์

/GOOG/CL_AUTH_GOOGLE

เว้นช่องอื่นๆ ว่างไว้

6 สร้างรายงาน Z เพื่อสร้างที่เก็บข้อมูลใน Cloud Storage

  1. เข้าสู่ระบบระบบ SAP
  2. ไปที่รหัสธุรกรรม SE38 และสร้างโปรแกรมรายงานชื่อ ZDEMO_CREATE_BUCKET.
  3. ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดดังที่แสดงด้านล่าง

93f3edb7bbb5c3c4.png

ในป๊อปอัปถัดไป ให้เลือก "ออบเจ็กต์ในเครื่อง" หรือ "ระบุชื่อแพ็กเกจ" ตามต้องการ

  1. ในตัวแก้ไข ABAP ให้เพิ่มโค้ดต่อไปนี้
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.
 

โปรดทราบว่าหากชื่อที่เก็บข้อมูลไม่ซ้ำกันทั่วโลก ระบบจะไม่สร้างที่เก็บข้อมูล ดังนั้นโปรดใช้ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บข้อมูลก่อนเรียกใช้โค้ด

  1. บันทึกและเปิดใช้งานรายงาน
  2. เรียกใช้รายงาน (กด F8)

เมื่อดำเนินการเสร็จเรียบร้อยแล้ว คุณควรเห็นเอาต์พุตรายงานดังที่แสดงด้านล่าง

ff232fba9a4178fb.png

7 สร้างรายงาน Z เพื่ออ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและอัปโหลดไปยังที่เก็บข้อมูล Cloud Storage

ก่อนทำกิจกรรมนี้ คุณต้องเตรียมไฟล์ข้อความขนาดใหญ่ เรามีไฟล์ข้อความขนาดใหญ่ที่สร้างและอัปโหลดไปยังเซิร์ฟเวอร์แอปพลิเคชันแล้ว คุณใช้รหัสธุรกรรม CG3Z เพื่ออัปโหลดไฟล์ไปยังเซิร์ฟเวอร์แอปพลิเคชันของ SAP ได้

ในตัวอย่างนี้ เราใช้ไฟล์ข้อความขนาดประมาณ 40 MB ซึ่งอัปโหลดไปยังเซิร์ฟเวอร์แอปพลิเคชันในไดเรกทอรี /tmp แล้ว

นอกจากนี้ คุณยังดาวน์โหลดโฟลเดอร์นี้จาก GitHub โดยใช้ลิงก์ต่อไปนี้ได้ด้วย ไฟล์ตัวอย่าง

  1. เข้าสู่ระบบ SAP
  2. ไปที่รหัสธุรกรรม SE38 และสร้างโปรแกรมรายงานชื่อ ZDEMO_UPLOAD_FILE.
  3. ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดดังที่แสดงด้านล่าง

19cbe6987bba58e4.png

ในป๊อปอัปถัดไป ให้เลือก "ออบเจ็กต์ในเครื่อง" หรือ "ระบุชื่อแพ็กเกจ" ตามต้องการ

  1. ในตัวแก้ไข ABAP ให้เพิ่มโค้ดต่อไปนี้
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. บันทึกและเปิดใช้งานรายงาน
  2. เรียกใช้รายงาน (กด F8)

เมื่อดำเนินการเสร็จเรียบร้อยแล้ว คุณควรเห็นเอาต์พุตรายงานดังที่แสดงด้านล่าง

c982bfcd07d7e487.png

คุณสามารถตรวจสอบว่าอัปโหลดไฟล์สําเร็จหรือไม่โดยไปที่ที่เก็บข้อมูล Cloud Storage ตามที่แสดงด้านล่าง

90678b475e165adf.png

1886be610c63ed6b.png

8 อธิบายการอัปโหลดไฟล์ไปยัง Cloud Storage โดยใช้โค้ด ABAP SDK

โดยพื้นฐานแล้ว โปรแกรม ABAP นี้จะผสานรวมกับ Google Cloud Storage โดยจะอ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและส่งข้อมูลไฟล์ไปยัง API Client Stub ของ Storage API เพื่ออัปโหลดไปยังที่เก็บข้อมูลซึ่งสร้างขึ้นในโปรแกรมรายงานก่อนหน้านี้

โปรแกรมรายงานที่คุณสร้างเพื่ออัปโหลดไฟล์จะทําสิ่งต่อไปนี้

รายละเอียดทีละขั้นตอน

สร้างการเชื่อมต่อ:

  • โดยจะสร้างการเชื่อมต่อ HTTP กับบริการ Google Storage โดยใช้คลาส /GOOG/CL_STORAGE_V1

อ่านข้อมูลไฟล์

  • อ่านไฟล์บนเซิร์ฟเวอร์แอปพลิเคชันโดยทำ OPEN DATASET จากนั้นเรียกใช้โมดูลฟังก์ชัน SAP มาตรฐาน SCMS_STRING_TO_XSTRING เพื่อแปลงเป็นรูปแบบ XSTRING

เพิ่มพารามิเตอร์การค้นหาทั่วไป

  • หากต้องการแบ่งไฟล์ ประเภทการอัปโหลดที่เราเลือกต้องเป็น "อัปโหลดแบบดำเนินการต่อได้" โดยค่าเริ่มต้น เมื่อเลือกการอัปโหลดแบบเริ่มใหม่ได้ ระบบจะแบ่งข้อมูลไฟล์ออกเป็นกลุ่มขนาด 8 MB และอัปโหลด อย่างไรก็ตาม นักพัฒนาแอปสามารถเปลี่ยนขนาดการแบ่งกลุ่มนี้ได้โดยการตั้งค่าพารามิเตอร์ IV_P_CHUNK_SIZE แต่เราขอแนะนำให้ใช้การตั้งค่าเริ่มต้น
  • หากต้องการให้เมธอด API ทราบว่าต้องเลือกตัวเลือกการอัปโหลด "อัปโหลดต่อได้" เราจะเรียกเมธอด ADD_COMMON_QPARAM และส่ง uploadType เป็น resumable.

แทรกวัตถุ

  • เรียกใช้เมธอด INSERT_OBJECTS โดยส่งพารามิเตอร์ต่อไปนี้ไปให้
  • IV_Q_NAME: ชื่อไฟล์ที่จะจัดเก็บเนื้อหาใน Cloud Storage
  • IV_P_BUCKET: ชื่อที่เก็บข้อมูลที่จะอัปโหลดไฟล์
  • IS_DATA: ข้อมูลไฟล์ที่ต้องอัปโหลด
  • IV_CONTENT_TYPE: ประเภทเนื้อหาของไฟล์ สำหรับสถานการณ์ปัจจุบันของเรา เราใช้ "text/plain" เนื่องจากเราอัปโหลดไฟล์ข้อความ

โปรดทราบว่าเราจะไม่ส่งค่าใดๆ ไปยังพารามิเตอร์การนําเข้า IV_CHUNK_SIZE และปล่อยให้สแต็บไคลเอ็นต์ API ใช้ค่าเริ่มต้นที่เชื่อมโยงกับพารามิเตอร์นี้ ซึ่งก็คือ 8 MB

จัดการความสําเร็จ/ข้อผิดพลาด:

  • แสดงการตอบกลับของ API โดยอิงตามว่าการเรียก API สำเร็จหรือไม่

ปิดการเชื่อมต่อ:

  • ปิดการเชื่อมต่อ HTTP กับบริการพื้นที่เก็บข้อมูล

9 ขอแสดงความยินดี

ยินดีด้วย คุณทำ Codelab "การอัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage" เสร็จเรียบร้อยแล้ว

Cloud Storage JSON API มีความสามารถหลายอย่าง และเมื่อใช้ ABAP SDK สําหรับ Google Cloud คุณจะเข้าถึง API เหล่านี้ได้โดยตรงในระบบ SAP โดยใช้ ABAP

Google Cloud Storage เป็นตัวเลือกที่ยอดเยี่ยมในการจัดเก็บและจัดการข้อมูลจํานวนมาก ซึ่งธุรกิจ องค์กร และแอปพลิเคชันต่างๆ จำนวนมากใช้

ประโยชน์บางส่วนของการใช้ Google Cloud Storage มีดังนี้

  • คุ้มค่า: Google Cloud Storage เป็นวิธีจัดเก็บและจัดการข้อมูลจำนวนมากที่คุ้มค่า
  • ความเรียบง่าย: Google Cloud Storage ใช้งานง่ายด้วย API ที่ใช้งานง่ายและเข้าใจง่าย
  • ความยืดหยุ่น: Google Cloud Storage ใช้ได้กับแอปพลิเคชันและแพลตฟอร์มที่หลากหลาย

ตอนนี้คุณก็เริ่มทำตาม Codelab ด้านล่างเพื่อเรียนรู้วิธีใช้ ABAP SDK เพื่อเข้าถึงบริการต่างๆ ของ Google Cloud ต่อได้แล้ว

  • ส่งเหตุการณ์ไปยัง Pub/Sub
  • รับเหตุการณ์จาก Cloud Pub/Sub
  • ใช้ Cloud Translation API เพื่อแปลข้อความ
  • ใช้ DLP API สำหรับการปกปิดข้อมูลส่วนบุคคล
  • เรียกใช้ BigQuery ML จาก ABAP

10 ล้างข้อมูล

หากไม่ต้องการทำ Codelab เพิ่มเติมที่เกี่ยวข้องกับ ABAP SDK สำหรับ Google Cloud โปรดดำเนินการล้างข้อมูล

ลบโปรเจ็กต์

  • ลบโปรเจ็กต์ Google Cloud
gcloud projects delete abap-sdk-poc

ลบทรัพยากรแต่ละรายการ

  1. ลบอินสแตนซ์การประมวลผลโดยทำดังนี้
gcloud compute instances delete abap-trial-docker
  1. ลบกฎไฟร์วอลล์
gcloud compute firewall-rules delete sapmachine
  1. ลบบัญชีบริการ
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com