העלאת קובץ ל-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 for 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 עם ערכת ה-SDK של ABAP ל-Google Cloud.
  • לפני שממשיכים בקודלאב הזה, צריך להשלים את הקודלאב 1 (התקנת ABAP Platform Trial 1909 ב-Google Cloud Platform והתקנת ABAP SDK ל-Google Cloud) ואת הקודלאב 2 (הגדרת אימות של ABAP SDK באמצעות אסימונים ל-SAP Hosted ב-Compute Engine VM).
  • אם השלמתם את Codelab 1 ואת Codelab 2, המערכת של ABAP Platform Trial 1909 ב-Google Cloud הוקצה לכם, יחד עם ההגדרות הנדרשות לאימות ולקישוריות.
  • אם לא השלמתם את הקודלאב 1 ואת הקודלאב 2, לא תהיה לכם את כל התשתית והקישוריות הנדרשים כדי לבצע את השלבים שמפורטים בקודלאב הזה. לכן, עליכם להשלים את 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 משמש כ-placeholder לפרויקט ב-Google Cloud. מחליפים את abap-sdk-poc במזהה הפרויקט.

  1. כדי לוודא שהתפקיד נוסף, עוברים לדף IAM. חשבון השירות שיצרתם אמור להופיע יחד עם התפקיד שהוקצה לו, כפי שמוצג בהמשך:

92d75ce1554efb69.png

5.‏ יצירת הגדרת מפתח לקוח

עכשיו, אחרי שהגדרת את הדרישות המוקדמות בצד של Google Cloud, נוכל להמשיך בהגדרה בצד של SAP.

להגדרות שקשורות לאימות ולקישוריות, ערכת ה-SDK של ABAP ל-Google Cloud משתמשת בטבלה /GOOG/CLIENT_KEY

כדי לשמור על ההגדרות בטבלה /GOOG/CLIENT_KEY:

  1. בממשק המשתמש של SAP, מזינים את קוד העסקה SPRO.
  2. לוחצים על SAP Reference IMG.
  3. לוחצים על ABAP SDK for Google Cloud > Basic Settings > Configure Client Key.
  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

Authorization Class

/GOOG/CL_AUTH_GOOGLE

משאירים את כל שאר השדות ריקים.

6.‏ יצירת דוח Z כדי ליצור קטגוריה ב-Cloud Storage

  1. מתחברים למערכת SAP.
  2. עוברים לקוד העסקה SE38 ויוצרים תוכנית דוחות בשם ZDEMO_CREATE_BUCKET..
  3. בחלון הקופץ שנפתח, מספקים את הפרטים הבאים:

93f3edb7bbb5c3c4.png

בחלון הקופץ הבא, בוחרים באפשרות Local Object (אובייקט מקומי) או Provide a package name (ציון שם חבילה) לפי הצורך.

  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

בדוגמה הזו אנחנו משתמשים בקובץ טקסט בגודל של כ-40MB, שכבר הועלה לשרת האפליקציות בספרייה /tmp.

אפשר גם להוריד את התיקייה הזו מ-GitHub באמצעות הקישור הבא: קובץ לדוגמה

  1. מתחברים למערכת SAP
  2. עוברים לקוד העסקה SE38 ויוצרים תוכנית דוחות בשם ZDEMO_UPLOAD_FILE..
  3. בחלון הקופץ שנפתח, מספקים את הפרטים הבאים:

19cbe6987bba58e4.png

בחלון הקופץ הבא, בוחרים באפשרות Local Object (אובייקט מקומי) או Provide a package name (ציון שם חבילה) לפי הצורך.

  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.

הוספת פרמטרים נפוצים של שאילתות

  • כדי לחלק את הקובץ לקטעים, צריך לבחור בסוג ההעלאה 'ניתן להמשך'. כברירת מחדל, כשמפעילים העלאה שניתן להמשיך, נתוני הקובץ מחולקים למקטעים של 8MB‎ ומועלים. עם זאת, מפתחים יכולים לשנות את גודל הקטעים על ידי הגדרת הפרמטר 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, ומאפשרים ל-Stub של לקוח ה-API להשתמש בערך ברירת המחדל שמשויך לפרמטר הזה, שהוא 8MB.

טיפול בהצלחות ובשגיאות:

  • הצגת תגובת ה-API על סמך הצלחת קריאת ה-API.

סגירת החיבור:

  • סגירת החיבור ל-HTTP לשירות האחסון.

9.‏ מזל טוב

מעולה! סיימתם את Codelab בנושא 'העלאת קובץ לקטגוריה של Cloud Storage'.

ל-Cloud Storage JSON API יש הרבה יכולות, ובעזרת ABAP SDK ל-Google Cloud אפשר לגשת אליהן ישירות במערכות 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.‏ הסרת המשאבים

אם אתם לא רוצים להמשיך בקודלאבים הנוספים שקשורים ל-ABAP SDK ל-Google Cloud, תוכלו להמשיך לניקוי.

מחיקת הפרויקט

  • מוחקים את הפרויקט ב-Google Cloud:
gcloud projects delete abap-sdk-poc

מחיקת משאבים ספציפיים

  1. מוחקים את מכונה לעיבוד נתונים:
gcloud compute instances delete abap-trial-docker
  1. מוחקים את firewall-rules:
gcloud compute firewall-rules delete sapmachine
  1. מוחקים את חשבון השירות:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com