チュートリアル:Azure CLI および Azure Event Grid を利用した Azure Relay Hybrid Connections へのカスタム イベントの転送

Azure Event Grid は、クラウドのイベント処理サービスです。 Azure Relay Hybrid Connections はサポートされているイベント ハンドラーの 1 つです。 パブリックなエンドポイントがないアプリケーションからのイベントを処理する必要がある場合は、イベント ハンドラーとしてハイブリッド接続を利用します。 そうしたアプリケーションは、コーポレート エンタープライズ ネットワークに存在することがあります。 この記事では、Azure CLI からカスタム トピックを作成してカスタム トピックにサブスクライブし、イベントをトリガーして結果を表示します。 イベントはハイブリッド接続に送信します。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • この記事では、Azure CLI のバージョン 2.0.56 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

リソース グループを作成する

Event Grid のトピックは Azure リソースであり、Azure リソース グループに配置する必要があります。 リソース グループは、Azure リソースをまとめてデプロイして管理するための論理上のコレクションです。

az group create コマンドを使用して、リソース グループを作成します。

次の例では、gridResourceGroup という名前のリソース グループを westus2 の場所に作成します。

az group create --name gridResourceGroup --location westus2

カスタム トピックの作成

Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。 次の例では、リソース グループにカスタム トピックを作成します。 <topic_name> は、カスタム トピックの一意の名前に置き換えてください。 Event Grid トピックの名前は、DNS エントリによって表されるため、一意である必要があります。

az eventgrid topic create --name <topic_name> -l westus2 -g gridResourceGroup

カスタム トピックへのサブスクライブ

Event Grid トピックをサブスクライブして、追跡対象のイベントを Event Grid に指示します。次の例は、作成したカスタム トピックをサブスクライブし、エンドポイントに対するハイブリッド接続のリソース ID を渡しています。 ハイブリッド接続の ID は以下の形式です。

/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Relay/namespaces/<relay-namespace>/hybridConnections/<hybrid-connection-name>

次のスクリプトは、リレー名前空間のリソース ID を取得します。 ハイブリッド接続の ID を作成し、Event Grid トピックをサブスクライブします。 このスクリプトは、エンドポイントのタイプを hybridconnection に設定し、そのエンドポイントにハイブリッド接続 ID を使用します。

relaynsname=<namespace-name>
relayrg=<resource-group-for-relay>
hybridname=<hybrid-name>

relayid=$(az relay namespace show --resource-group $relayrg --name $relaynsname --query id --output tsv)
hybridid="$relayid/hybridConnections/$hybridname"
topicid=$(az eventgrid topic show --name <topic_name> -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name <event_subscription_name> \
  --endpoint-type hybridconnection \
  --endpoint $hybridid \
  --expiration-date "<yyyy-mm-dd>"

サブスクリプションに有効期限の日付が設定されていることに注意してください。

イベントを処理するアプリケーションを作成する

ハイブリッド接続からイベントを取得できるアプリケーションが必要です。 C# 用の Microsoft Azure Event Grid Hybrid Connection Consumer サンプルは、その操作を実行します。 前提条件の手順は既に完了しています。

  1. Visual Studio 2019 以降を使用していることを確認してください。

  2. ローカル コンピューターにリポジトリを複製します。

  3. Visual Studio に HybridConnectionConsumer プロジェクトを読み込みます。

  4. Program.cs で、<relayConnectionString><hybridConnectionName> を、作成した Relay 接続文字列およびハイブリッド接続名に置き換えます。

  5. Visual Studio からアプリケーションをコンパイルして実行します。

トピックへのイベントの送信

イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。 この記事では、Azure CLI を使ってイベントをトリガーする方法を示します。 代わりに、Event Grid パブリッシャー アプリケーションを使うこともできます。

まず、カスタム トピックの URL とキーを取得します。 もう一度、<topic_name> に実際のカスタム トピック名を使用します。

endpoint=$(az eventgrid topic show --name <topic_name> -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name <topic_name> -g gridResourceGroup --query "key1" --output tsv)

この記事では、単純化するために、サンプル イベント データをカスタム トピックに送信します。 通常はイベント データをアプリケーションまたは Azure サービスから送信することになります。 CURL は、HTTP 要求を送信するユーティリティです。 この記事では、CURL を使用して、イベントをカスタム トピックに送信します。

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint

リスナー アプリケーションはイベント メッセージを受信することになります。

リソースをクリーンアップする

引き続きこのイベントを使用する場合は、この記事で作成したリソースをクリーンアップしないでください。 それ以外の場合は、次のコマンドを使用して、この記事で作成したリソースを削除します。

az group delete --name gridResourceGroup

次のステップ

トピックを作成し、イベントをサブスクライブする方法がわかったら、Event Grid でできることについて、さらに情報を収集しましょう。