העלאת קובץ ל-Cloud Storage באמצעות חלוקה למקטעי נתונים

1. מבוא

בשיעור Codelab הזה מפורטים השלבים ליצירת חשבון שירות ולשימוש בו כדי להגדיר את מפתח הלקוח ואת טבלת מפת התקשורת שסופקו על ידי ABAP SDK for Google Cloud, ולהפעיל את Cloud Storage JSON API ב-ABAP.

ב-Codelab הזה נעשה שימוש בשירותי Google Cloud הבאים:

  • Compute Engine
  • Network Services
  • Cloud Shell
  • ‫Cloud Storage API בפורמט JSON 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 החיצונית של המכונה הווירטואלית ככתובת ה-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 for Google Cloud מותקן.
  • לפני שממשיכים עם שיעור Codelab הזה, צריך להשלים את שיעור Codelab מספר 1 (Install ABAP Platform Trial 1909 on Google Cloud Platform and Install ABAP SDK for Google Cloud) ואת שיעור Codelab מספר 2 (Configure ABAP SDK Authentication using tokens for SAP Hosted on Compute Engine VM).
  • אם השלמתם את שיעור Codelab 1 ואת שיעור Codelab 2, הוקצה לכם ניסיון חינם של ABAP Platform 1909 System ב-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 הוא placeholder לפרויקט Google Cloud. מחליפים את abap-sdk-poc במזהה הפרויקט.

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

92d75ce1554efb69.png

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

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

לצורך הגדרות שקשורות לאימות ולקישוריות, ABAP SDK for Google Cloud משתמש בטבלה /GOOG/CLIENT_KEY

כדי לשמור על ההגדרה בטבלה /GOOG/CLIENT_KEY, מבצעים את הפעולות הבאות:

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

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.png1886be610c63ed6b.png

8. הסבר על קוד ABAP SDK להעלאת קובץ ל-Cloud Storage

בעצם, תוכנית ה-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 method שצריך לבחור באפשרות ההעלאה 'ניתנת להמשך', מפעילים את ה-method‏ ADD_COMMON_QPARAM ומעבירים את uploadType כ-resumable.

הוספת אובייקטים

  • מבצעים קריאה ל-method‏ INSERT_OBJECTS ומעבירים אליה את הפרמטרים הבאים:
  • ‫IV_Q_NAME: שם הקובץ שבו התוכן יישמר ב-Cloud Storage
  • ‫IV_P_BUCKET: שם הקטגוריה שאליה צריך להעלות את הקובץ
  • IS_DATA: נתוני הקובץ שצריך להעלות
  • ‫IV_CONTENT_TYPE: סוג התוכן של הקובץ. בתרחיש הנוכחי אנחנו משתמשים ב-text/plain כי אנחנו מעלים קובץ טקסט.

שימו לב: אנחנו לא מעבירים ערך לפרמטר הייבוא IV_CHUNK_SIZE ומאפשרים ל-API Client Stub להשתמש בערך ברירת המחדל שמשויך לפרמטר הזה, שהוא 8MB.

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

  • התגובה מה-API מוצגת בהתאם להצלחה או לכישלון של הקריאה ל-API.

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

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

9. מזל טוב

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

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

אם לא רוצים להמשיך עם ה-codelabs הנוספים שקשורים ל-ABAP SDK for 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