1. はじめに
この Codelab では、サービス アカウントを作成し、ABAP SDK for Google Cloud で提供されるクライアント キーと通信マップ テーブルを構成して、ABAP で Cloud Storage JSON API を呼び出す手順について説明します。
この Codelab では、次の Google Cloud サービスを使用します。
- Compute Engine
- ネットワーク サービス
- Cloud Shell
- Cloud Storage JSON API V1
注: 新しい Google Cloud プロジェクトを作成すると、Cloud Storage を含む特定の API とサービスが自動的に有効になります。これにより、この堅牢なストレージ ソリューションをすぐに利用できます。そのため、追加の手順として有効にする必要はありません。
前提条件
- ABAP SDK for Google Cloud がインストールされた SAP システムにアクセスできることを確認します。
- 新しいシステムをセットアップするには、Codelab「Google Cloud Platform に ABAP Platform Trial をインストールして ABAP SDK をインストールする」をご覧ください。
作成するアプリの概要
ABAP SDK for Google Cloud を使用して、SAP システムに次のプログラムを作成します。
- Cloud Storage バケットを作成します。
- アプリケーション サーバーからファイルを読み取り、作成した Cloud Storage バケットにアップロードします。
2. 要件
- ブラウザ(Chrome、Firefox など)
- 課金が有効になっている Google Cloud プロジェクト、または Google Cloud Platform の90 日間の無料トライアル アカウントを作成します。
- システムにインストールされている SAP GUI(Windows または Java)。SAP GUI がラップトップにすでにインストールされている場合は、VM の外部 IP アドレスをアプリケーション サーバー IP として使用して SAP に接続します。Mac を使用している場合は、こちらのリンクから SAP GUI for Java をインストールすることもできます。
3. 始める前に
- ABAP SDK for Google Cloud がインストールされた SAP システムにアクセスできることを確認します。
- 新しいシステムをセットアップするには、Codelab の Google Cloud Platform に ABAP Platform Trial をインストールして ABAP SDK をインストールするをご覧ください。
- Google Cloud コンソールのプロジェクト セレクタページで、Google Cloud プロジェクトを選択または作成します(例:
abap-sdk-poc).
- Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。90 日間の無料試用アカウントを使用している場合は、この手順をスキップしてください。
- Google Cloud 上で動作するコマンドライン環境の Cloud Shell を使用します。Cloud コンソールで、右上にある [Cloud Shell をアクティブにする] をクリックします。
- 次のコマンドを実行してアカウントの認証を行い、デフォルトのプロジェクトを
abap-sdk-poc
に設定します。ゾーンus-west4-b
は例として使用されています。必要に応じて、次のコマンドのプロジェクトとゾーンを必要に応じて変更してください。
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- ABAP SDK for Google Cloud がインストールされた SAP システムにアクセスできる必要があります。
- この Codelab に進む前に、Codelab 1(Google Cloud Platform に ABAP Platform Trial 1909 をインストールして ABAP SDK for Google Cloud をインストールする)と Codelab 2(Compute Engine VM でホストされている SAP のトークンを使用して ABAP SDK 認証を構成する)を完了する必要があります。
- Codelab 1 と Codelab 2 を完了すると、Google Cloud に ABAP Platform Trial 1909 System がプロビジョニングされ、認証と接続に必要な設定が完了します。
- Codelab 1 と Codelab 2 を完了していない場合、この Codelab の手順を実行するために必要なインフラストラクチャと接続がすべて揃っていません。そのため、この Codelab を進める前に、Codelab 1 と Codelab 2 を完了する必要があります。
4. Storage オブジェクト ユーザーのロールを付与したサービス アカウントを作成する
必要なロールを持つサービス アカウントを作成するには、次の操作を行います。
- Cloud Shell ターミナルで次のコマンドを実行します。
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- 上記の手順で作成したサービス アカウントに、必要なロールを追加します。
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'
上のコマンドでは、Google Cloud プロジェクトのプレースホルダとして abap-sdk-poc
を使用しています。abap-sdk-poc
は、実際のプロジェクト ID に置き換えます。
- ロールが追加されたことを確認するには、[IAM] ページに移動します。作成したサービス アカウントが、割り当てられたロールとともに以下のように表示されます。
5. クライアント キー構成を作成する
Google Cloud 側の前提条件を設定したので、SAP 側の構成に進みます。
認証と接続関連の構成では、ABAP SDK for Google Cloud はテーブル /GOOG/CLIENT_KEY
を使用します。
テーブル /GOOG/CLIENT_KEY の構成を維持するには、次の操作を行います。
- SAP GUI で、トランザクション コード
SPRO
を入力します。 - [SAP 参照 IMG] をクリックします。
- [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。
- フィールドに対して次の値を維持します。
フィールド | 値 |
Google Cloud キー名 | TEST_STORAGE |
Google Cloud サービス アカウント名 |
|
Google Cloud のスコープ |
|
プロジェクト ID | abap-sdk-poc |
認可クラス |
|
その他のフィールドは空白のままにします。
6. Z レポートを作成して Cloud Storage にバケットを作成する
- SAP システムにログインします。
- トランザクション コード
SE38
に移動し、ZDEMO_CREATE_BUCKET.
という名前のレポート プログラムを作成します。 - 表示されたポップアップで、次のように詳細情報を入力します。
次のポップアップで、[ローカル オブジェクト] を選択するか、必要に応じてパッケージ名を指定します。
- 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.
バケット名がグローバルに一意でない場合、バケットは作成されません。コードを実行する前に、バケットに固有の名前を使用してください。
- レポートを保存して有効にします。
- レポートを実行します(F8 キーを押します)。
実行が成功すると、次のようなレポート出力が表示されます。
7. Z レポートを作成してアプリケーション サーバーからファイルを読み取り、Cloud Storage バケットにアップロードする
このアクティビティを実行する前に、大きなテキスト ファイルを準備する必要があります。ここでは、すでに大きなテキスト ファイルが作成され、アプリケーション サーバーにアップロードされています。トランザクション コード CG3Z を使用して、SAP システムのアプリケーション サーバーにファイルをアップロードできます。
この例では、サイズが約 40 MB のテキスト ファイルを使用し、このファイルはすでにアプリケーション サーバーの /tmp
ディレクトリにアップロードされています。
このフォルダは、サンプル ファイルのリンクを使用して GitHub からダウンロードすることもできます。
- SAP システムにログインします。
- トランザクション コード
SE38
に移動し、ZDEMO_UPLOAD_FILE.
という名前のレポート プログラムを作成します。 - 表示されたポップアップで、次のように詳細情報を入力します。
次のポップアップで、[ローカル オブジェクト] を選択するか、必要に応じてパッケージ名を指定します。
- 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( ).
- レポートを保存して有効にします。
- レポートを実行します(F8 キーを押します)。
実行が成功すると、次のようなレポート出力が表示されます。
ファイルが正常にアップロードされたかどうかを確認するには、次の手順に沿って Cloud Storage バケットに移動します。
8. ABAP SDK コードを使用してファイルを Cloud Storage にアップロードする方法の説明
本質的には、この ABAP プログラムは Google Cloud Storage と統合されています。アプリケーション サーバーからファイルを読み取り、ファイルデータを Storage API の API クライアント スタブに渡して、前のレポート プログラムで作成したストレージ バケットにアップロードします。
ファイルをアップロードするために作成したレポート プログラムは、次の処理を行います。
手順の詳細
接続を確立する:
/GOOG/CL_STORAGE_V1
クラスを使用して、Google Storage サービスへの HTTP 接続を確立します。
ファイルデータを読み取る
OPEN
DATASET
を実行してアプリケーション サーバー上のファイルを読み取り、標準の SAP 関数モジュールSCMS_STRING_TO_XSTRING
を呼び出してXSTRING
形式に変換します。
一般的なクエリ パラメータを追加する
- チャンク化を実現するには、アップロードの種類として「再開可能な」アップロードを選択する必要があります。デフォルトでは、再開可能なアップロードを選択すると、ファイルデータは 8 MB のチャンクに分割されてアップロードされます。ただし、パラメータ
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
には値を渡さず、API クライアント スタブにこのパラメータに関連付けられたデフォルト値(8 MB)を使用させます。
成功/エラーを処理する:
- API 呼び出しが成功したかどうかに基づいて API レスポンスを表示します。
接続を閉じる:
- Storage Service への HTTP 接続を閉じます。
9. 完了
これで、これで、「Cloud Storage バケットにファイルをアップロードする」Codelab は終了です。
Cloud Storage JSON API には多くの機能があり、ABAP SDK for Google Cloud を使用すると、ABAP を使用して SAP システムでネイティブに直接アクセスできます。
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 を使用して PII を除去する
- ABAP から BigQuery ML を呼び出す
10. クリーンアップ
ABAP SDK for Google Cloud に関連する追加の Codelabs を続行しない場合は、クリーンアップに進んでください。
プロジェクトの削除
- Google Cloud プロジェクトを削除します。
gcloud projects delete abap-sdk-poc
個々のリソースを削除する
- コンピューティング インスタンスを削除します。
gcloud compute instances delete abap-trial-docker
- ファイアウォール ルールを削除します。
gcloud compute firewall-rules delete sapmachine
- サービス アカウントを削除します。
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com