آپلود فایل به Cloud Storage با chunking

آپلود فایل به Cloud Storage با chunking

درباره این codelab

subjectآخرین به‌روزرسانی: سپتامبر ۴, ۲۰۲۴
account_circleنویسنده: Satish Inamdar

1. مقدمه

در این لبه کد، مراحل ایجاد یک حساب سرویس و استفاده از آن برای پیکربندی جدول Client Key و Communication Map ارائه شده توسط ABAP SDK برای Google Cloud و فراخوانی Cloud Storage JSON API در ABAP را فهرست کرده ایم.

خدمات Google Cloud زیر در این کد لبه استفاده می شود:

  • موتور محاسباتی
  • خدمات شبکه
  • پوسته ابری
  • Cloud Storage JSON API V1

توجه: وقتی یک پروژه Google Cloud جدید ایجاد می‌کنید، مجموعه خاصی از APIها و سرویس‌ها، از جمله فضای ذخیره‌سازی ابری، به‌طور خودکار فعال می‌شوند. این تضمین می کند که می توانید بلافاصله از این راه حل ذخیره سازی قوی استفاده کنید. بنابراین لازم نیست آن را به عنوان یک مرحله اضافی فعال کنید.

پیش نیازها

چیزی که خواهی ساخت

برنامه های زیر را با استفاده از ABAP SDK برای Google Cloud در سیستم SAP خود ایجاد خواهید کرد

  • یک سطل ذخیره سازی ابری ایجاد کنید.
  • یک فایل را از سرور برنامه بخوانید و آن را در Cloud Storage Bucket ایجاد شده آپلود کنید.

2. الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس .
  • یک پروژه Google Cloud با فعال کردن صورت‌حساب یا ایجاد یک حساب آزمایشی رایگان 90 روزه برای Google Cloud Platform.
  • SAP GUI (ویندوز یا جاوا) در سیستم شما نصب شده است. اگر SAP GUI قبلاً روی لپ‌تاپ شما نصب شده است، با استفاده از آدرس IP خارجی VM به عنوان IP سرور برنامه، به SAP متصل شوید. اگر در مک هستید، می توانید SAP GUI برای جاوا را نیز در این لینک نصب کنید.

3. قبل از شروع

6757b2fb50ddcc2d.png

  • دستورات زیر را برای احراز هویت برای حساب خود اجرا کنید و پروژه پیش فرض را روی abap-sdk-poc تنظیم کنید. Zone 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 دسترسی داشته باشید.
  • قبل از ادامه با این آزمایشگاه کد 1 ( نصب ABAP Platform Trial 1909 در Google Cloud Platform و نصب ABAP SDK for Google Cloud ) و codelab 2 ( پیکربندی احراز هویت ABAP SDK با استفاده از نشانه‌ها برای SAP Hosted on Compute Engine VM ) را تکمیل کنید.
  • اگر کد 1 و کد 2 را تکمیل کرده باشید، با این کار یک سیستم آزمایشی 1909 پلتفرم ABAP در Google Cloud به همراه تنظیمات لازم برای احراز هویت و اتصال را برای شما فراهم می کند.
  • اگر Codelab 1 و Codelab 2 را تکمیل نکرده باشید، تمامی زیرساخت ها و اتصالات لازم برای انجام مراحل ارائه شده در این کدلب را نخواهید داشت. بنابراین، قبل از ادامه کار با این کد، باید کد 1 و کد 2 را تکمیل کنید.

4. یک حساب سرویس با نقش کاربر Storage Object ایجاد کنید

برای ایجاد یک حساب کاربری با نقش مورد نیاز، مراحل زیر را انجام دهید:

  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 > Basic Settings > Configure Client Key کلیک کنید.
  4. مقادیر زیر را در برابر فیلدها حفظ کنید:

میدان

ارزش

نام کلید Google Cloud

TEST_STORAGE

نام حساب سرویس Google Cloud

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

Google Cloud Scope

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

شناسه پروژه

abap-sdk-poc

کلاس مجوز

/GOOG/CL_AUTH_GOOGLE

تمام فیلدهای دیگر را خالی بگذارید

6. یک گزارش Z برای ایجاد یک سطل در فضای ذخیره سازی ابری ایجاد کنید

  1. وارد سیستم SAP خود شوید.
  2. به کد تراکنش SE38 بروید و یک گزارش برنامه با نام ZDEMO_CREATE_BUCKET.
  3. در پاپ آپی که باز می شود، جزئیات را مطابق شکل زیر ارائه دهید:

93f3edb7bbb5c3c4.png

در پنجره پاپ‌آپ بعدی، Local Object را انتخاب کنید یا یک نام بسته را به انتخاب خود ارائه دهید.

  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-Report برای خواندن فایل از Application Server و آپلود آن در Cloud Storage Bucket ایجاد کنید.

قبل از انجام این فعالیت، باید یک فایل متنی بزرگ تهیه کنید. در اینجا ما قبلاً یک فایل متنی بزرگ ایجاد و در سرور برنامه خود آپلود کرده ایم. می توانید از کد تراکنش CG3Z برای آپلود فایل در سرور برنامه سیستم SAP خود استفاده کنید

برای این مثال، ما از یک فایل متنی با اندازه ~40 مگابایت استفاده می‌کنیم که قبلاً در دایرکتوری /tmp در Application Server آپلود شده است.

همچنین می توانید این پوشه را از GitHub با استفاده از لینک زیر دانلود کنید: Sample File

  1. وارد سیستم SAP خود شوید
  2. به کد تراکنش SE38 بروید و یک گزارش برنامه با نام ZDEMO_UPLOAD_FILE.
  3. در پاپ آپی که باز می شود، جزئیات را مطابق شکل زیر ارائه دهید:

19cbe6987bba58e4.png

در پنجره پاپ‌آپ بعدی، Local Object را انتخاب کنید یا یک نام بسته را به انتخاب خود ارائه دهید.

  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

می‌توانید تأیید کنید که آیا فایل با موفقیت آپلود شده است یا نه

90678b475e165adf.png

1886be610c63ed6b.png

8. آپلود فایل به فضای ذخیره سازی ابری با استفاده از کد ABAP SDK توضیح داده شده است

در اصل، این برنامه ABAP با Google Cloud Storage ادغام می شود. یک فایل را از سرور برنامه می خواند و داده های فایل را به API Client Stub of Storage API ارسال می کند تا آن را در یک سطل ذخیره سازی که در برنامه گزارش قبلی ایجاد شده بود، آپلود کند.

برنامه گزارشی که برای آپلود فایل ایجاد کرده‌اید، کارهای زیر را انجام می‌دهد:

تفکیک گام به گام

برقراری ارتباط:

  • با استفاده از کلاس /GOOG/CL_STORAGE_V1 یک اتصال HTTP به سرویس Google Storage برقرار می کند.

داده های فایل را بخوانید

  • فایل را روی سرور برنامه با انجام OPEN DATASET می خواند و سپس ماژول استاندارد تابع SAP SCMS_STRING_TO_XSTRING را برای تبدیل به فرمت XSTRING فراخوانی می کند.

اضافه کردن پارامترهای رایج پرس و جو

  • برای دستیابی به قطعه بندی، نوع آپلودی که باید انتخاب کنیم، آپلود "Resumable" است. به‌طور پیش‌فرض زمانی که آپلود مجدد انتخاب می‌شود، داده‌های فایل به تکه‌های 8 مگابایتی تقسیم می‌شوند و آپلود می‌شوند. با این حال، توسعه‌دهندگان می‌توانند با تنظیم پارامتر IV_P_CHUNK_SIZE ، این اندازه قطعه‌سازی را تغییر دهند، اما توصیه می‌شود از تنظیمات پیش‌فرض استفاده کنید.
  • برای اینکه روش API بداند که گزینه آپلود "Resumable" باید انتخاب شود، روش 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 Client Stub از مقدار پیش فرض مرتبط با این پارامتر که 8 مگابایت است استفاده کند.

مدیریت موفقیت / خطاها:

  • پاسخ API را بر اساس موفقیت آمیز بودن یا نبودن تماس API نشان می دهد.

بستن اتصال:

  • اتصال HTTP به سرویس ذخیره سازی را می بندد.

9. تبریک میگم

تبریک می گویم! شما Codelab "آپلود یک فایل در سطل ذخیره سازی ابری" را با موفقیت به پایان رساندید.

Cloud Storage JSON API دارای قابلیت‌های زیادی است و با ABAP SDK برای Google Cloud، می‌توانید مستقیماً با استفاده از ABAP در سیستم‌های SAP خود به آنها دسترسی داشته باشید.

Google Cloud Storage یک گزینه عالی برای ذخیره و مدیریت حجم زیاد داده است. این توسط طیف گسترده ای از مشاغل، شرکت ها و برنامه های کاربردی استفاده می شود.

برخی از مزایای استفاده از Google Cloud Storage:

  • مقرون به صرفه بودن: Google Cloud Storage یک روش مقرون به صرفه برای ذخیره و مدیریت مقادیر زیادی داده است.
  • سادگی: استفاده از Google Cloud Storage با یک API ساده و شهودی آسان است.
  • انعطاف پذیری: Google Cloud Storage را می توان با انواع برنامه ها و پلتفرم ها استفاده کرد.

اکنون می توانید برای ادامه مسیر یادگیری خود در استفاده از ABAP SDK برای دسترسی به خدمات مختلف Google Cloud، با کدهای زیر ادامه دهید.

  • یک رویداد به Pub/Sub ارسال کنید
  • رویدادی را از Cloud Pub/Sub دریافت کنید
  • از Cloud Translation API برای ترجمه متون استفاده کنید
  • از DLP API برای ویرایش PII استفاده کنید
  • با 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. قوانین فایروال را حذف کنید:
gcloud compute firewall-rules delete sapmachine
  1. حساب سرویس را حذف کنید:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com