ABAP SDK for Google Cloud を使用して Cloud Pub/Sub にイベントを公開する

1. はじめに

この Codelab では、ABAP SDK for Google Cloud を使用して Google Cloud Pub/Sub API にイベントをパブリッシュする手順を説明します。

この Codelab では、次の Google Cloud サービスを使用します。

  • Pub/Sub
  • Cloud Shell

作成するアプリの概要

学習内容は次のとおりです。

  • Google Cloud プロジェクトで Pub/Sub を有効にする。
  • Pub/Sub トピックを作成する。
  • メッセージをパブリッシュします。

2. 始める前に

  • システムに ABAP SDK for Google Cloud がインストールされている。新しいシステムを設定するには、Codelab の Install ABAP Trial on Google Cloud Platform を参照してください。
  • Google Cloud 上で動作するコマンドライン環境の Cloud Shell を使用します。Cloud コンソールで、右上にある [Cloud Shell をアクティブにする] をクリックします。

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

3. 概要

この Codelab の範囲には、Pub/Sub サービスの次のコンポーネントが含まれます。

  • パブリッシャー(プロデューサー): 特定のトピックに関するメッセージを作成してメッセージ サービスに送信(パブリッシュ)します。
  • メッセージ: メッセージング サービスを通って移動するデータ。
  • トピック: メッセージのフィードを示す名前付きエンティティ。

4f5676da8922467f.png

4. Pub/Sub サービスを設定する

  1. 必要なロールを持つサービス アカウントを作成するには、Cloud Shell ターミナルで次のコマンドを実行します。
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. Pub/Sub API をサービス アカウント(abap-sdk-poc)で有効にするには、Cloud Shell ターミナルで次のコマンドを実行します。
gcloud services enable pubsub.googleapis.com
  1. トピックを作成できるように、サービス アカウントに IAM ロール pubsub.topics.create を付与します。Cloud Shell ターミナルで次のコマンドを実行します。
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.create'
  1. トピックにメッセージを公開できるようにするには、サービス アカウントに IAM ロール pubsub.topics.publish を付与します。Cloud Shell ターミナルで次のコマンドを実行します。
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.publish'
  1. ロールが追加されたことを確認するには、[IAM] ページに移動します。作成したサービス アカウントと、そのサービス アカウントに割り当てられたロールが一覧表示されます。

5. クライアント キーを構成する

/GOOG/CLIENT_KEY テーブルで構成を維持するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード SPRO を入力します。
  2. [SAP 参照 IMG] をクリックします。
  3. [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。
  4. [New Entries] をクリックします。
  5. 次のフィールドに値を入力します。

フィールド

説明

Google Cloud キー名

PUBSUB_DEMO

Google Cloud サービス アカウント名

abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud のスコープ

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

Google Cloud プロジェクト ID

abap-sdk-poc

認可クラス

/GOOG/CL_AUTH_GOOGLE

その他のフィールドは空白のままにします

ec6b6f94bfa85533.png

6. トピックを作成する

API スタブ /GOOG/CL_PUBSUB_V1 のメソッド CREATE_TOPICS を使用してトピックを作成します。メソッドのシグネチャ:

d40fde108ccf2853.png

  1. SAP GUI で、トランザクション コード SE38 を入力します。
  2. ZPUBSUB_DEMO という名前のレポートを作成します。
  3. 表示されたポップアップで、次の図のように詳細を入力し、[保存] をクリックします。

f9cbdabb6ca96fc4.png

  1. 次のポップアップで、必要に応じて [Local Object] を選択するか、パッケージ名を指定します。
  2. ABAP エディタで、次のコードを追加します。
" Data Declaration
DATA:
  lo_client        TYPE REF TO /goog/cl_pubsub_v1.

TRY.
    " Open HTTP Connection
    CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.

    " Populate relevant parameters
    DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
    DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).

    " Call API method pubsub.topics.create
    lo_client->create_topics(
      EXPORTING
        iv_p_projects_id = lv_p_projects_id
        iv_p_topics_id   = lv_p_topics_id
      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_client->is_success( lv_ret_code ) = abap_true.
      DATA(lv_msg) = 'Topic ' && ':' && lv_p_topics_id && ' was created!'.
      MESSAGE lv_msg TYPE 'I' .
    ELSE.
      MESSAGE lv_err_text TYPE 'E'.
    ENDIF.

    " Close HTTP Connection
    lo_client->close( ).

  CATCH /goog/cx_sdk INTO DATA(lo_exception).
    MESSAGE lo_exception->get_text( ) TYPE 'E'.
    RETURN.
ENDTRY.
  1. レポートを保存して有効にします。
  2. レポートを実行します(F8)。

実行が成功すると、次のようなレポート出力が表示されます。

16aa8a4c59d776d9.png

7. トピックにメッセージをパブリッシュする

トピックの準備ができたので、データを送信することに集中できます。次のステップでは、このトピックにメッセージをパブリッシュする方法を学習します。メッセージは、API スタブ /GOOG/CL_PUBSUB_V1 のメソッド PUBLISH_TOPICS を使用してトピックにパブリッシュされます。

メソッドのシグネチャ:

459fe21ce68bd811.png

  1. SAP GUI で、トランザクション コード SE38 を入力します。
  2. ZPUBSUB_DEMO_PUBLISH という名前のレポートを作成します。
  3. 表示されたポップアップで、次の図のように詳細を入力し、[保存] をクリックします。

9a180c4e9a1e139.png

  1. 次のポップアップで、必要に応じて [Local Object] を選択するか、パッケージ名を指定します。
  2. ABAP エディタで、次のコードを追加します。
" Data Declaration
DATA:
  lo_client        TYPE REF TO /goog/cl_pubsub_v1,
  ls_message       TYPE /goog/cl_pubsub_v1=>ty_025,
  ls_input         TYPE /goog/cl_pubsub_v1=>ty_023.

TRY.
    " Open HTTP Connection
    CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.

    " Populate relevant parameters
    DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
    DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).

    ls_message-data = cl_http_utility=>encode_base64( unencoded = ' This message was published to topic' ).
    APPEND ls_message TO ls_input-messages.

    " Call API method : pubsub.topics.publish
    " This method publishes the message(encoded in base64 format to the topic )
    lo_client->publish_topics(
     EXPORTING
       iv_p_projects_id = lv_p_projects_id
       iv_p_topics_id   = lv_p_topics_id
       is_input         = ls_input
     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_client->is_success( lv_ret_code ) = abap_true.
       DATA(lv_msg) = 'Message was published to topic '  && ': ' &&         lv_p_topics_id.
      MESSAGE lv_msg TYPE 'I' DISPLAY LIKE 'S'.

    ELSE.
      MESSAGE lv_err_text TYPE 'E'.
    ENDIF.

    " Close HTTP Connection
    lo_client->close( ).

  CATCH /goog/cx_sdk INTO DATA(lo_exception).
    MESSAGE lv_err_text TYPE 'E'.
    RETURN.
ENDTRY.
  1. レポートを保存して有効にします。
  2. レポートを実行します(F8)。

実行が成功すると、次のようなレポート出力が表示されます。

384125235efc104.png

8. 完了

これで、ABAP SDK for Google Cloud を使用して、Google Cloud Platform の Pub/Sub API にメッセージをパブリッシュしました。

次の Codelab に進んで、ABAP SDK を使用してさまざまな Google Cloud サービスにアクセスする学習を続けてください。

  • Cloud Pub/Sub からイベントを受信する
  • チャンクを使用して Cloud Storage バケットにファイルをアップロードする
  • ABAP から Vertex AI test-bison を呼び出す
  • . . .

9. クリーンアップ

ABAP SDK for Google Cloud に関連する追加の Codelabs を続行しない場合は、クリーンアップに進んでください。

プロジェクトを削除する

  • 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