Загрузите файл в Cloud Storage с функцией фрагментирования

1. Введение

В этом практическом задании мы перечислили шаги по созданию учетной записи службы и ее использованию для настройки таблицы ключей клиента и карты связи, предоставляемых ABAP SDK для Google Cloud, а также для вызова JSON API Cloud Storage в ABAP.

В данном практическом задании используются следующие сервисы Google Cloud:

  • Вычислительный движок
  • Сетевые службы
  • Облачная оболочка
  • JSON API облачного хранилища V1

Примечание: При создании нового проекта Google Cloud автоматически включается определенный набор API и сервисов, включая Cloud Storage. Это гарантирует, что вы сможете немедленно воспользоваться преимуществами этого мощного решения для хранения данных. Поэтому вам не нужно включать его на дополнительном этапе.

Предварительные требования

Что вы построите

Вам потребуется создать следующие программы в вашей системе SAP, используя ABAP SDK для Google Cloud.

  • Создайте корзину облачного хранилища.
  • Прочитать файл с сервера приложений и загрузить его в созданный сегмент облачного хранилища.

2. Требования

  • Браузер, например Chrome или Firefox .
  • Проект Google Cloud с включенной оплатой или создайте 90-дневную бесплатную пробную учетную запись для Google Cloud Platform.
  • SAP GUI (Windows или Java) должен быть установлен в вашей системе. Если SAP GUI уже установлен на вашем ноутбуке, подключитесь к SAP, используя внешний IP-адрес виртуальной машины в качестве IP-адреса сервера приложений. Если вы используете Mac, вы также можете установить SAP GUI для 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.
  • Перед тем как приступить к этому практическому занятию, необходимо выполнить практическое задание 1 ( Установка пробной версии платформы ABAP 1909 на платформе Google Cloud и установка ABAP SDK для Google Cloud ) и практическое задание 2 ( Настройка аутентификации ABAP SDK с использованием токенов для SAP, размещенного на виртуальной машине Compute Engine ).
  • Если вы выполнили практическое задание 1 и практическое задание 2, это обеспечило вам доступ к пробной версии системы ABAP Platform Trial 1909 в Google Cloud, а также необходимую настройку для аутентификации и подключения.
  • Если вы не прошли код-лабораторию 1 и код-лабораторию 2, у вас не будет всей необходимой инфраструктуры и подключения для выполнения шагов, описанных в этой код-лаборатории. Поэтому вам необходимо пройти код-лабораторию 1 и код-лабораторию 2, прежде чем приступать к этой код-лаборатории.

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 введите код транзакции 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-отчет для создания сегмента в облачном хранилище.

  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-отчет для чтения файла с сервера приложений и его загрузки в облачное хранилище.

Перед выполнением этой операции необходимо подготовить большой текстовый файл. У нас уже есть большой текстовый файл, созданный и загруженный на сервер приложений. Для загрузки файла на сервер приложений вашей системы SAP можно использовать транзакцию CG3Z.

В этом примере мы используем текстовый файл размером около 40 МБ, который уже загружен на сервер приложений в каталог /tmp .

Вы также можете скачать эту папку с GitHub, используя следующую ссылку: Sample File

  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

Вы можете проверить, успешно ли загружен файл, перейдя в свой облачный накопитель, как показано ниже.

90678b475e165adf.png1886be610c63ed6b.png

8. Загрузка файла в облачное хранилище с использованием кода ABAP SDK (объяснение).

По сути, эта программа на ABAP интегрируется с Google Cloud Storage. Она считывает файл с сервера приложений и передает данные файла в API-клиент-заглушку API хранилища для загрузки в хранилище, созданное в предыдущей программе.

Созданная вами программа для формирования отчетов и загрузки файлов выполняет следующие действия:

Пошаговое описание

Установить соединение:

  • Он устанавливает HTTP-соединение со службой Google Storage, используя класс /GOOG/CL_STORAGE_V1 .

Чтение данных файла

  • Программа считывает файл на сервере приложений, выполняя команду OPEN DATASET , а затем вызывает стандартный функциональный модуль SAP SCMS_STRING_TO_XSTRING для преобразования в формат XSTRING .

Добавить общие параметры запроса

  • Для реализации разбиения файла на части необходимо выбрать тип загрузки «Возобновляемая загрузка». По умолчанию при выборе возобновляемой загрузки данные файла разбиваются на части по 8 МБ и загружаются. Однако разработчики могут изменить размер этих частей, установив параметр IV_P_CHUNK_SIZE , но рекомендуется использовать значение по умолчанию.
  • Чтобы сообщить методу API о необходимости выбора опции "Возобновляемая загрузка", мы вызываем метод ADD_COMMON_QPARAM и передаем uploadType как resumable.

Вставка объектов

  • Вызывает метод INSERT_OBJECTS , передавая ему следующие параметры:
  • IV_Q_NAME : Имя файла, под которым будет храниться содержимое в облачном хранилище.
  • IV_P_BUCKET : Имя корзины, куда необходимо загрузить файл.
  • IS_DATA : Данные файла, которые необходимо загрузить.
  • IV_CONTENT_TYPE : Тип содержимого файла. В нашем текущем сценарии мы используем "text/plain", поскольку загружаем текстовый файл.

Обратите внимание, что мы не передаем никакого значения параметру импорта IV_CHUNK_SIZE и позволяем API-клиенту использовать значение по умолчанию, связанное с этим параметром, которое равно 8 МБ.

Обработка успешных/ошибочных действий:

  • Отображает ответ API в зависимости от того, был ли вызов API успешным или нет.

Тесная связь:

  • Закрывает HTTP-соединение со службой хранения данных.

9. Поздравляем!

Поздравляем! Вы успешно завершили практическое занятие "Загрузка файла в облачное хранилище".

JSON API облачного хранилища обладает широкими возможностями, и с помощью ABAP SDK для Google Cloud вы можете получить к ним прямой доступ в своих системах SAP, используя ABAP.

Google Cloud Storage — отличный вариант для хранения и управления большими объемами данных. Он используется широким кругом предприятий, компаний и приложений.

Некоторые преимущества использования Google Cloud Storage:

  • Экономическая эффективность: Google Cloud Storage — это экономичный способ хранения и управления большими объемами данных.
  • Простота: Google Cloud Storage прост в использовании благодаря простому и интуитивно понятному API.
  • Гибкость: Google Cloud Storage можно использовать с различными приложениями и платформами.

Теперь вы можете перейти к выполнению приведенного ниже практического задания, чтобы продолжить изучение использования ABAP SDK для доступа к различным облачным сервисам Google.

  • Отправить событие в Pub/Sub
  • Получите событие из Cloud Pub/Sub
  • Используйте Cloud Translation API для перевода текстов.
  • Используйте API DLP для удаления персональных данных.
  • Вызов 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