Tải tệp lên Cloud Storage bằng tính năng phân đoạn

Tải tệp lên Cloud Storage theo từng phần

Thông tin về lớp học lập trình này

subjectLần cập nhật gần đây nhất: thg 9 4, 2024
account_circleTác giả: Satish Inamdar

1. Giới thiệu

Trong lớp học lập trình này, chúng tôi đã liệt kê các bước để tạo tài khoản dịch vụ và sử dụng tài khoản đó để định cấu hình khoá ứng dụng và bảng Bản đồ liên lạc do SDK ABAP cho Google Cloud cung cấp, đồng thời gọi API JSON của Bộ nhớ trên đám mây trong ABAP.

Các dịch vụ sau đây của Google Cloud được sử dụng trong lớp học lập trình này:

  • Compute Engine
  • Dịch vụ mạng
  • Cloud Shell
  • Cloud Storage JSON API phiên bản 1

Lưu ý: Khi bạn tạo một Dự án Google Cloud mới, một bộ API và dịch vụ cụ thể (bao gồm cả Cloud Storage) sẽ tự động được bật. Điều này đảm bảo rằng bạn có thể tận dụng ngay giải pháp lưu trữ mạnh mẽ này. Do đó, bạn không cần bật tính năng này làm một bước bổ sung.

Điều kiện tiên quyết

Sản phẩm bạn sẽ tạo ra

Bạn sẽ tạo các chương trình sau trong Hệ thống SAP bằng SDK ABAP cho Google Cloud

  • Tạo một bộ chứa trên Cloud Storage.
  • Đọc một tệp từ máy chủ ứng dụng và tải tệp đó lên Bộ chứa trên Google Cloud Storage đã tạo.

2. Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox.
  • Một dự án Google Cloud đã bật tính năng thanh toán hoặc Tạo tài khoản dùng thử miễn phí 90 ngày cho Google Cloud Platform.
  • SAP GUI (Windows hoặc Java) đã được cài đặt trong hệ thống của bạn. Nếu bạn đã cài đặt SAP GUI trên máy tính xách tay, hãy kết nối với SAP bằng địa chỉ IP bên ngoài của máy ảo làm địa chỉ IP của Máy chủ ứng dụng. Nếu đang dùng máy Mac, bạn cũng có thể cài đặt SAP GUI cho Java có trong đường liên kết này.

3. Trước khi bắt đầu

6757b2fb50ddcc2d.png

  • Chạy các lệnh sau để xác thực cho tài khoản của bạn và đặt dự án mặc định thành abap-sdk-poc. Ví dụ: vùng us-west4-b. Nếu cần, vui lòng thay đổi dự án và vùng trong các lệnh sau đây theo lựa chọn ưu tiên của bạn.
gcloud auth login
gcloud config
set project abap-sdk-poc
gcloud config
set compute/zone us-west4-b
  • Bạn phải có quyền truy cập vào một hệ thống SAP đã cài đặt SDK ABAP cho Google Cloud.
  • Bạn phải hoàn thành lớp học lập trình 1 (Cài đặt bản dùng thử Nền tảng ABAP 1909 trên Google Cloud Platform và Cài đặt SDK ABAP cho Google Cloud) và lớp học lập trình 2 (Định cấu hình tính năng Xác thực SDK ABAP bằng mã thông báo cho SAP được lưu trữ trên máy ảo Compute Engine) trước khi tiếp tục lớp học lập trình này.
  • Nếu bạn đã hoàn tất lớp học lập trình 1 và lớp học lập trình 2, thì bạn đã được cung cấp Hệ thống dùng thử ABAP Platform 1909 trên Google Cloud, cùng với chế độ thiết lập bắt buộc để xác thực và kết nối.
  • Nếu chưa hoàn tất lớp học lập trình 1 và lớp học lập trình 2, bạn sẽ không có đủ cơ sở hạ tầng và kết nối cần thiết để thực hiện các bước trong lớp học lập trình này. Do đó, bạn phải hoàn tất lớp học lập trình 1 và lớp học lập trình 2 trước khi tiếp tục lớp học lập trình này.

4. Tạo Tài khoản dịch vụ có Vai trò người dùng đối tượng bộ nhớ

Để tạo tài khoản dịch vụ có vai trò bắt buộc, hãy thực hiện các bước sau:

  1. Chạy lệnh sau trong dòng lệnh Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
  1. Bây giờ, hãy thêm các vai trò bắt buộc vào tài khoản dịch vụ đã tạo ở bước trên:
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'

Lệnh trên sử dụng abap-sdk-poc làm phần giữ chỗ cho Dự án Google Cloud. Thay thế abap-sdk-poc bằng mã dự án của bạn.

  1. Để xác minh vai trò đã được thêm, hãy chuyển đến trang IAM. Tài khoản dịch vụ mà bạn đã tạo sẽ được liệt kê cùng với vai trò đã được chỉ định cho tài khoản đó như minh hoạ dưới đây:

92d75ce1554efb69.png

5. Tạo cấu hình khoá ứng dụng

Giờ đây, khi bạn đã thiết lập các điều kiện tiên quyết ở phía Google Cloud, chúng ta có thể tiếp tục với cấu hình ở phía SAP.

Đối với cấu hình liên quan đến việc xác thực và kết nối, SDK ABAP cho Google Cloud sử dụng bảng /GOOG/CLIENT_KEY

Để duy trì cấu hình trong bảng /GOOG/CLIENT_KEY, hãy thực hiện các bước sau:

  1. Trong SAP GUI, hãy nhập mã giao dịch SPRO.
  2. Nhấp vào SAP Reference IMG (Hình ảnh tham chiếu SAP).
  3. Nhấp vào ABAP SDK for Google Cloud (SDK ABAP cho Google Cloud) > Basic Settings (Cài đặt cơ bản) > Configure Client Key (Định cấu hình khoá ứng dụng).
  4. Duy trì các giá trị sau đây cho các trường:

Trường

Giá trị

Tên khoá Google Cloud

TEST_STORAGE

Tên tài khoản dịch vụ Google Cloud

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

Phạm vi Google Cloud

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

Mã dự án

abap-sdk-poc

Lớp uỷ quyền

/GOOG/CL_AUTH_GOOGLE

Để trống tất cả các trường khác

6. Tạo báo cáo Z để tạo bộ chứa trên Cloud Storage

  1. Đăng nhập vào Hệ thống SAP.
  2. Chuyển đến mã giao dịch SE38 và tạo một Chương trình báo cáo có tên ZDEMO_CREATE_BUCKET.
  3. Trong cửa sổ bật lên, hãy cung cấp thông tin chi tiết như bên dưới:

93f3edb7bbb5c3c4.png

Trong cửa sổ bật lên tiếp theo, hãy chọn Đối tượng cục bộ hoặc Cung cấp tên gói theo lựa chọn của bạn.

  1. Trong Trình chỉnh sửa ABAP, hãy thêm mã sau:
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.
 

Xin lưu ý rằng nếu tên bộ chứa không phải là tên duy nhất trên toàn cầu thì bộ chứa sẽ không được tạo, do đó, hãy cố gắng sử dụng tên duy nhất cho bộ chứa trước khi thực thi mã

  1. Lưu và kích hoạt báo cáo.
  2. Thực thi báo cáo (Nhấn phím F8).

Khi thực thi thành công, bạn sẽ thấy kết quả báo cáo như dưới đây:

ff232fba9a4178fb.png

7. Tạo báo cáo Z để đọc tệp từ máy chủ ứng dụng và tải tệp đó lên bộ chứa trên Cloud Storage

Trước khi thực hiện hoạt động này, bạn cần chuẩn bị một tệp văn bản lớn. Tại đây, chúng ta đã tạo và tải một tệp văn bản lớn lên máy chủ ứng dụng. Bạn có thể sử dụng mã giao dịch CG3Z để tải tệp lên máy chủ ứng dụng của hệ thống SAP

Trong ví dụ này, chúng ta đang sử dụng một tệp văn bản có kích thước khoảng 40 MB, tệp này đã được tải lên Máy chủ ứng dụng trong thư mục /tmp.

Bạn cũng có thể tải thư mục này xuống từ GitHub bằng đường liên kết sau: Tệp mẫu

  1. Đăng nhập vào Hệ thống SAP
  2. Chuyển đến mã giao dịch SE38 và tạo một Chương trình báo cáo có tên ZDEMO_UPLOAD_FILE.
  3. Trong cửa sổ bật lên, hãy cung cấp thông tin chi tiết như bên dưới:

19cbe6987bba58e4.png

Trong cửa sổ bật lên tiếp theo, hãy chọn Đối tượng cục bộ hoặc Cung cấp tên gói theo lựa chọn của bạn.

  1. Trong Trình chỉnh sửa ABAP, hãy thêm mã sau:
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. Lưu và kích hoạt báo cáo.
  2. Thực thi báo cáo (Nhấn phím F8).

Khi thực thi thành công, bạn sẽ thấy kết quả báo cáo như dưới đây:

c982bfcd07d7e487.png

Bạn có thể xác minh xem tệp đã được tải lên thành công hay chưa bằng cách chuyển đến Bộ chứa trên Google Cloud Storage như minh hoạ bên dưới

90678b475e165adf.png

1886be610c63ed6b.png

8. Giải thích cách tải tệp lên Cloud Storage bằng mã SDK ABAP

Về cơ bản, chương trình ABAP này tích hợp với Google Cloud Storage. Chương trình này đọc một tệp từ máy chủ ứng dụng và chuyển dữ liệu tệp đến Trình bổ trợ ứng dụng API của API bộ nhớ để tải tệp lên một bộ chứa bộ nhớ được tạo trong chương trình báo cáo trước đó.

Chương trình báo cáo mà bạn đã tạo để tải tệp lên sẽ thực hiện những việc sau:

Thông tin chi tiết từng bước

Thiết lập kết nối:

  • Thư viện này thiết lập kết nối HTTP với dịch vụ Google Storage bằng cách sử dụng lớp /GOOG/CL_STORAGE_V1.

Đọc dữ liệu tệp

  • Đọc tệp trên máy chủ ứng dụng bằng cách thực hiện OPEN DATASET, sau đó gọi mô-đun hàm SAP chuẩn SCMS_STRING_TO_XSTRING để chuyển đổi sang định dạng XSTRING.

Thêm các thông số truy vấn phổ biến

  • Để phân đoạn, chúng ta cần chọn loại tải lên là "Tiếp tục". Theo mặc định, khi bạn chọn tính năng tải lên có thể tiếp tục, dữ liệu tệp sẽ được chia thành các phần 8 MB và tải lên. Tuy nhiên, nhà phát triển có thể thay đổi kích thước phân đoạn này bằng cách đặt tham số IV_P_CHUNK_SIZE, nhưng bạn nên sử dụng chế độ cài đặt mặc định.
  • Để cho phương thức API biết rằng bạn phải chọn tuỳ chọn tải lên "Có thể tiếp tục", chúng ta gọi phương thức ADD_COMMON_QPARAM và truyền uploadType dưới dạng resumable.

Chèn đối tượng

  • Gọi phương thức INSERT_OBJECTS bằng cách truyền các tham số sau vào phương thức đó:
  • IV_Q_NAME: Tên tệp chứa nội dung sẽ được lưu trữ trong Cloud Storage
  • IV_P_BUCKET: Tên bộ chứa mà bạn phải tải tệp lên
  • IS_DATA: Dữ liệu tệp cần tải lên
  • IV_CONTENT_TYPE: Loại nội dung của tệp, trong trường hợp hiện tại, chúng ta đang sử dụng "text/plain" vì đang tải tệp văn bản lên.

Xin lưu ý rằng chúng ta không truyền bất kỳ giá trị nào đến tham số nhập IV_CHUNK_SIZE và cho phép Giả lập ứng dụng API sử dụng giá trị mặc định liên kết với tham số này, tức là 8 MB.

Xử lý thành công/lỗi:

  • Hiển thị phản hồi API dựa trên việc lệnh gọi API có thành công hay không.

Đóng kết nối:

  • Đóng kết nối HTTP với Dịch vụ lưu trữ.

9. Xin chúc mừng

Xin chúc mừng! Bạn đã hoàn tất thành công lớp học lập trình "Tải tệp lên bộ chứa trên Cloud Storage".

Cloud Storage JSON API có nhiều chức năng và với SDK ABAP cho Google Cloud, bạn có thể truy cập trực tiếp vào các chức năng đó trong hệ thống SAP của mình bằng cách sử dụng ABAP.

Google Cloud Storage là một lựa chọn tuyệt vời để lưu trữ và quản lý lượng lớn dữ liệu. API này được nhiều doanh nghiệp, doanh nghiệp lớn và ứng dụng sử dụng.

Một số lợi ích của việc sử dụng Google Cloud Storage:

  • Tiết kiệm chi phí: Google Cloud Storage là một cách tiết kiệm chi phí để lưu trữ và quản lý lượng lớn dữ liệu.
  • Tính đơn giản: Google Cloud Storage rất dễ sử dụng, với một API đơn giản và trực quan.
  • Linh hoạt: Bạn có thể sử dụng Google Cloud Storage với nhiều ứng dụng và nền tảng.

Giờ đây, bạn có thể tiếp tục tham gia lớp học lập trình bên dưới để tiếp tục hành trình tìm hiểu cách sử dụng SDK ABAP nhằm truy cập vào nhiều Dịch vụ của Google Cloud.

  • Gửi một sự kiện đến Pub/Sub
  • Nhận sự kiện từ Cloud Pub/Sub
  • Sử dụng Cloud Translation API để dịch văn bản
  • Sử dụng API DLP để loại bỏ PII
  • Gọi BigQuery ML từ ABAP

10. Dọn dẹp

Nếu bạn không muốn tiếp tục các lớp học lập trình bổ sung liên quan đến SDK ABAP cho Google Cloud, vui lòng tiến hành dọn dẹp.

Xoá dự án

  • Xoá dự án trên Google Cloud:
gcloud projects delete abap-sdk-poc

Xoá từng tài nguyên

  1. Xoá thực thể máy tính:
gcloud compute instances delete abap-trial-docker
  1. Xoá firewall-rules:
gcloud compute firewall-rules delete sapmachine
  1. Xoá tài khoản dịch vụ:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com