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. 始める前に

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. サービス アカウント(abap-sdk-poc)に Pub/Sub API を有効にするには、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. 次のポップアップで、[ローカル オブジェクト] を選択するか、必要に応じてパッケージ名を指定します。
  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. 次のポップアップで、[ローカル オブジェクト] を選択するか、必要に応じてパッケージ名を指定します。
  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