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 - Google Cloud Platform に ABAP Trial をインストールするを参照してください。
- 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
3. 概要
この Codelab では、Pub/Sub サービスの次のコンポーネントについて説明します。
- パブリッシャー(プロデューサー): 特定のトピックに関するメッセージを作成してメッセージ サービスに送信(パブリッシュ)します。
- メッセージ: メッセージ サービスで移動するデータ。
- トピック: メッセージのフィードを示す名前付きエンティティ。
4. Pub/Sub サービスを設定します。
- 必要なロールを持つサービス アカウントを作成するには、Cloud Shell ターミナルで次のコマンドを実行します。
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- サービス アカウント(
abap-sdk-poc
)に Pub/Sub API を有効にするには、Cloud Shell ターミナルで次のコマンドを実行します。
gcloud services enable pubsub.googleapis.com
- トピックを作成できるように、サービス アカウントに 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'
- トピックにメッセージをパブリッシュできるように、サービス アカウントに 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'
- ロールが追加されたことを確認するには、[IAM] ページに移動します。作成したサービス アカウントと、そのサービス アカウントに割り当てられたロールが一覧表示されます。
5. クライアント キーを構成する
/GOOG/CLIENT_KEY
テーブルの構成を維持するには、次の操作を行います。
- SAP GUI で、トランザクション コード SPRO を入力します。
- [SAP 参照 IMG] をクリックします。
- [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。
- [New Entries] をクリックします。
- 次のフィールドに値を入力します。
フィールド | 説明 |
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 |
その他のフィールドは空白のままにします
6. トピックを作成する
トピックを作成するには、API スタブ /GOOG/CL_PUBSUB_V1 の CREATE_TOPICS メソッドを使用します。メソッドのシグネチャ:
- SAP GUI で、トランザクション コード SE38 を入力します。
- ZPUBSUB_DEMO という名前のレポートを作成します。
- 表示されたポップアップで、次のように詳細を入力し、[保存] をクリックします。
- 次のポップアップで、[ローカル オブジェクト] を選択するか、必要に応じてパッケージ名を指定します。
- 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.
- レポートを保存して有効にします。
- レポートを実行します(F8)。
実行が成功すると、次のようなレポート出力が表示されます。
7. トピックにメッセージをパブリッシュする
トピックの準備ができたので、データを送信する準備を進めましょう。次のステップとして、このトピックにメッセージをパブリッシュする方法を学習しましょう。メッセージは、API スタブ /GOOG/CL_PUBSUB_V1
のメソッド PUBLISH_TOPICS
を使用してトピックにパブリッシュされます。
メソッドのシグネチャ:
- SAP GUI で、トランザクション コード SE38 を入力します。
- ZPUBSUB_DEMO_PUBLISH という名前のレポートを作成します。
- 表示されたポップアップで、次のように詳細を入力し、[保存] をクリックします。
- 次のポップアップで、[ローカル オブジェクト] を選択するか、必要に応じてパッケージ名を指定します。
- 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.
- レポートを保存して有効にします。
- レポートを実行します(F8)。
実行が成功すると、次のようなレポート出力が表示されます。
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
個々のリソースを削除する
- コンピューティング インスタンスを削除します。
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