Quantcast
Channel: Postmanタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 470

Azure ServiceBus キューにREST APIでメッセージを入れたいときもある

$
0
0

この記事は「NEXTSCAPE Advent Calendar 2020」15日目の記事です。

みなさま、クリスマスの定番「シュトーレン」を食べたことはありますか?あの白い粉をうまくこぼさずに攻略する方法があれば、そちらを記事にしたい今日このごろです。

現在、ServiceBus キューを拾ってLogicAppsから別システムのSQL Databaseへデータを連携する機能を開発しています。
テスト用にとPostmanからREST APIをたたいてキューにメッセージを追加しようとしたところ、SAS Tokenの付与で意外とハマってしまいました。
その辺のまとめとして、今回はAzure ServiceBus キューにREST APIでメッセージを追加する方法をご紹介したいと思います。

この記事でわかること

  • Postmanを利用したAzure ServiceBusキューのSAS Tokenを生成する方法
  • Postmanを利用したAzure ServiceBusキュー RestApiへのメッセージ送信方法

前提条件

  • ServiceBusについては事前に作成が行われている前提となり、本稿ではキューの作成から記載しています。
  • APIリクエストにはPostmanを利用しています。

ServiceBusの設定

キューを作成する

1. ServiceBusへメッセージ送信のためにキューを作成します。

"sample"という名前でキューを追加しました。
image.png

2. 次に作成したキューを選択し、共有アクセスポリシーを追加します。

"send"という名称で送信のみチェックを入れて追加しました。
image.png

3. 共有アクセスポリシーを追加すると、キーが発行されます。

SASトークンの発行にはこちらの主キーを利用します。
image.png

これでServiceBus キュー側の準備は完了しました。

SAS Tokenの詳細

送信するSAS Tokenのフォーマットとパラメータは以下となります。
このトークンを生成して、REST APIを呼び出すときにPOSTリクエストのAuthorizationヘッダへ付与します。

SharedAccessSignature sig=<signature-string>&se=<expiry>&skn=<keyName>&sr=<URL-encoded-resourceURI>
パラメータ名詳細
seトークンの有効期限。 エポック 1970 年 1 月 1 日 00:00:00 UTC (UNIX エポック) からトークンの期限が切れるまでの秒数を示す整数。
skn承認規則の名前。
srアクセスされているリソースの URI。
sig署名

Postmanの設定

PostmanでServiceBusキューへのPOSTリクエストを作成する

  • メソッドはPOSTを選択します
  • 送信先のURLにはServiceBusの"URL + キュー名 + messages"で記載します。 image.png

Pre-request Scriptを利用してSAS Tokenを生成する

Pre-request ScriptにはJavaScriptを記載することができるので、けっこういろいろなことが出来ます。
では設定方法を確認していきましょう。

1. Pre-request Scriptを開き、SAS Token生成用のコードを入力します。

image.png
以下がコードとなります。resourceUri, keyName, keyにはさきほど作成した環境の値をセットしてください。
生成したSAS Tokenは、Postmanの環境変数内に'SASToken'のキー名で追加しました。

// ServiceBusキューのUrivarresourceUri='https://********.servicebus.windows.net/sample/';// 共有アクセスポリシーのポリシー名varkeyName='send';// 共有アクセスポリシーの主キーvarkey='******************************';// 有効期限の生成varnow=newDate();varweek=60*60*24*7;varttl=Math.round(now.getTime()/1000)+week;// signatureの生成varencodedUri=encodeURIComponent(resourceUri)varsignature=encodedUri+'\n'+ttl;varsigByte=CryptoJS.HmacSHA256(signature,key);varsigBase64=CryptoJS.enc.Base64.stringify(sigByte);// SAS Tokenの生成pm.globals.set('SASToken','SharedAccessSignature sr='+encodedUri+'&sig='+encodeURIComponent(sigBase64)+'&se='+ttl+'&skn='+keyName);

2. Headersにパラメータを追加します。

KeyとValueに以下のパラメータを追加します。
{{SASToken}}は、Pre-request Scriptで追加したPostmanの環境変数内にあるSASTokenを取得します。

KEYVALUE
Authorization{{SASToken}}
Content-Typeapplication/json

image.png
これでSAS Tokenの生成を行う設定は完了です。

SASトークンを利用したREST APIによるメッセージ送信

送信するメッセージの作成

Bodyを開き、rawを選択してJSON文字列を記載します。
image.png

メッセージの送信

Sendボタンをクリックして、ServiceBusキューにメッセージを送信します。
SAS Tokenの生成がうまくいけば、以下のように201 Createdが返ってきます。
image.png

キューを確認する

送信したメッセージがキューに送信されていることを確認します。
受信でメッセージを開くとキューから削除されてしまいますので、念のためピークで開きます。

Azureポータルからメッセージを送信したServiceBusを選択し、Service Bus Explorer --> ピークを開きます。
先ほど送信したメッセージが格納されているようです。
image.png
ピークをクリックしてメッセージを確認すると、先ほどPOSTで送信したメッセージが表示されました。
image.png

参考情報

まとめ

実はこの記事、一度はC#のコンソールアプリでSAS Tokenの発行をするという内容で書き終えました(汗)
ですが、ふと思いついてPre-request Scriptを利用したらPostmanだけで完結できてしまったので、修正して現在の記事となっています。
普段の開発ではSDK経由でキューへメッセージ送信を行うため、あまりREST API経由でメッセージを投げる機会は無いかもしれません。
お役にたつか微妙な記事となってしまいましたが、Postmanでお手軽にテストを行いたい時などにご参考頂ければ幸いです。

余談ですが、現在取り組んでいる機能開発はDynamics365-->ServiceBusキュー-->LogicApps-->SQL Databaseといった流れでデータを連携します。
次回があれば、その辺のお話をご紹介したいなと思っています。

では。


Viewing all articles
Browse latest Browse all 470

Trending Articles