前回の記事において、Event Hubsの基礎的な情報をご紹介させていただきました。
今回は実際にEvent Hubsの構築および、Event Hubsへのメッセージの送信受信を行っていきます。
イベントハブ名前空間の作成
Event Hubsの構築は先ず最初に「イベントハブ名前空間」の作成を行います。
プロジェクトの詳細
「プロジェクトの詳細」セクションでは下記の2つを選択します。
- サブスクリプションの選択
- リソースグループの選択
インスタンスの詳細
「インスタンスの詳細」セクションでは下記の4つの項目で記入および選択をします。
- 名前空間の名前 を記入
- イベントハブ名前空間の「名前」を記入します
- リージョンを選択
- イベントハブ名前空間を作成するリージョンを選択します
- 今回は「Japan East」を選択します
- 価格レベルの選択
- イベントハブ名前空間の価格レベルを選択します。
- 選択可能な価格レベルは「Basic」、「Standard」、「Premium」の3種類です
- 今回は「Basic」を選択します
- スループットユニット数の選択
- イベントハブ名前空間のスループットユニット数を選択します
- 選択可能なスループットユニット数は1~40
- 今回は「1」に設定します(デフォルト設定)
「価格レベル/スループットユニット」の選択ではそれぞれ下記のような操作が可能です。
セキュリティ
「セキュリティ」セクションでは下記の2つを選択します。
- TLSの最小バージョン の選択
- イベントハブ名前空間とクライアント間の通信の暗号化を行うTLS バージョンの選択をします
- 選択可能なバージョンは「1.2」、「1.1」、「1.0」です
- 今回は「バージョン 1.2」を選択します(デフォルト設定)
- ローカル認証の有効/無効
- ローカル認証(SASキー)による認証を有効/無効にします
- 今回は「有効」を選択します(デフォルト設定)
ネットワーク接続
「ネットワーク接続」セクションで選択可能な接続方法は2種類存在します。
- パブリックアクセス
- プライベートアクセス(Standard/Premiumのみ)
今回は価格レベル:Basicを用いての検証のため、「パブリックアクセス」を選択します。
イベントハブの作成
イベントハブ名前空間の作成が完了したら、次にイベントハブの作成を行います。
作成した名前空間の「概要」から「+イベントハブ」を選択します。
イベントハブの詳細
「イベントハブの詳細」セクションでは下記の2つの項目で入力および選択をします。
- イベントハブの 名前 を記載
- イベントハブの名前を入力します。
- パーティション数 を指定
- イベントハブで利用するパーティション数を指定します。
- 今回は「2」に設定します(デフォルト設定)。
保持
「保持」セクションでは下記の2つを選択します。
- クリーンアップポリシーの選択(削除/圧縮)
- イベントハブで保持するメッセージのクリーンアップポリシーを選択します
- 選択可能なクリーンアップポリシーは「削除」、「圧縮」です
- 今回は「削除」を選択します(デフォルト設定)
- メッセージの保持時間 を指定
- イベントハブ内でメッセージを保持する期間を設定します
- 価格レベルごとに最大保持期間が異なります
- Basic:1日
- Standard:7日
- Premium:90日
- 今回は「1時間」を選択します(デフォルト設定)
キャプチャの詳細
「キャプチャの詳細」セクションではキャプチャ機能の「オン/オフ」の選択します。
今回の動作確認では 価格レベル:Basic で実施するため、キャプチャ機能はオフを選択します。
イベントハブの確認
作成したイベントハブは下記の通りに確認することが可能です。
作成したイベントハブが存在することを確認します。
イベントハブの状態
イベントハブの状態は下記の通り確認することが可能です。
イベントハブの状態はアクティブ、無効、SendDisabledの3種類存在します。
それぞれの状態の違いは下記の通りです。
イベントハブの状態 |
データの送信 |
データの受信 |
アクティブ |
〇 |
〇 |
無効 |
× |
× |
SendDisabled |
× |
〇 |
※作成したイベントハブの状態が「アクティブ」or「SendDisabled」でない場合、イベントハブはメッセージを受信することができません。
データの送信/受信
イベントハブ名前空間、イベントハブの作成が完了したので、最後にMicrosoft公式サイトにある下記手順を参考に、イベントハブへのデータの送信と受信を実施します。
参考:Python を使用してイベント ハブとの間でイベントを送受信する
※ 今回はEvent Hubs関連以外に必要となる前提条件を満たしている前提で手順を紹介します(Pythonのインストール、BloBの構築、BLOB接続文字列の取得 etc.)
認証情報の取得
イベントハブ名前空間 > 設定 > 共通アクセスポリシー を順にクリックし、
ポリシーの一覧から「RootManageSharedAccessKey」をクリックします。
「接続文字列 – 主キー」の値をコピーします。
データ送信用/受信用 Pythonコードの編集
取得した認証情報をデータ送信用/受信用のPythonコードに記載していきます。
送信用Pythonコードの編集
作成したイベントハブ名とコピーした接続文字列を、イベントハブへのデータ送信用のPythonコード「send.py」の下記の2か所に記載します。
- EVENT_HUB_CONNECTION_STR = “イベントハブ接続文字列"
- EVENT_HUB_NAME = “イベントハブ名"
受信用Pythonコードの編集
BLOB接続文字列とコンテナ名および作成したイベントハブ名とコピーした接続文字列を、イベントハブへのデータ受信用のPythonコード「recv.py」の下記の4か所に記載します。
- BLOB_STORAGE_CONNECTION_STRING = “BLOB接続文字列”
- BLOB_CONTAINER_NAME = “コンテナ名“
- EVENT_HUB_CONNECTION_STR = “イベントハブ接続文字列"
- EVENT_HUB_NAME = “イベントハブ名"
Pythonコードの実行
認証情報の記載が完了したら、Pythonコードをそれぞれ実行しイベントハブにメッセージを送受信します。
メッセージの送信
データ送信用のpythonコードを実行すると下記のメッセージ(赤色部分)がイベントハブに送信されます。
実行コマンド: python send.py
「send.py」内抜粋
==========================================
# Add events to the batch.
event_data_batch.add(EventData('First event '))
event_data_batch.add(EventData('Second event'))
event_data_batch.add(EventData('Third event'))
==========================================
データの受信
データ受信用のpythonコードを実行するとメッセージがイベントハブから受信され、下記のコードをもとに、受信したメッセージが表示されます。
実行コマンド:python recv.py
「recv.py」内抜粋
==================================================
# Print the event data.
print(
'Received the event: "{}" from the partition with ID: "{}"'.format(
event.body_as_str(encoding="UTF-8"), partition_context.partition_id
)
)
==================================================
実際に表示されるメッセージ
==================================================
Received the event: "First event " from the partition with ID: "0"
Received the event: "Second event" from the partition with ID: "0"
Received the event: "Third event" from the partition with ID: "0"
==================================================
おわりに
今回の記事では、Event Hubs 構築編ということで、イベントハブ名前空間、イベントハブの構築の手順および、実際にメッセージをイベントハブに送信しイベントハブに送信されたメッセージを受信する、といった、具体的な構築の流れとイベントハブへの接続方法について紹介させていただきました。
前回の入門編と合わせて読んでいただければ Event Hubsについての最低限の知識と構築の流れを理解していただけるかと思います。
今後は、Event Hubsと連携してよく利用されるStream Analyticsについても紹介させていただければと考えております。