チュートリアル:Azure CLI および Azure Event Grid を利用した Azure Relay Hybrid Connections へのカスタム イベントの転送
Azure Relay Hybrid Connections はサポートされているイベント ハンドラーの 1 つです。 パブリックなエンドポイントがないアプリケーションからのイベントを処理する必要がある場合は、イベント ハンドラーとしてハイブリッド接続を利用します。 そうしたアプリケーションは、コーポレート エンタープライズ ネットワークに存在することがあります。 この記事では、Azure CLI からカスタム トピックを作成してカスタム トピックにサブスクライブし、イベントをトリガーして結果を表示します。 イベントはハイブリッド接続に送信します。
Note
Azure Event Grid を初めて使用する場合は、このチュートリアルを進める前に「Azure Event Grid とは」を参照してサービスの概要を確認してください。
前提条件
- この記事では、ハイブリッド接続およびリスナー アプリケーションがすでに作成されていることを前提としています。 ハイブリッド接続を開始するには、Get started with Relay Hybrid Connections - .NET または Get started with Relay Hybrid Connections - Node を参照してください。
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 サンプルは、その操作を実行します。 前提条件の手順は既に完了しています。
Visual Studio 2019 以降を使用していることを確認してください。
ローカル コンピューターにリポジトリを複製します。
Visual Studio に HybridConnectionConsumer プロジェクトを読み込みます。
Program.cs で、
<relayConnectionString>
と<hybridConnectionName>
を、作成した Relay 接続文字列およびハイブリッド接続名に置き換えます。Visual Studio からアプリケーションをコンパイルして実行します。
重要
チュートリアルが複雑にならないように、接続文字列を使って Azure Relay 名前空間に対する認証を行います。 運用環境では Microsoft Entra ID 認証を使用することをお勧めします。 アプリケーションを使うときは、アプリケーションのマネージド ID を有効にして、Relay 名前空間で ID に適切なロール (Azure Relay 所有者、Azure Relay 受信者、または Azure Relay 送信者) を割り当てることができます。 詳しくは、「Azure Relay リソースにアクセスするためのマネージド ID を Microsoft Entra ID で認証する」をご覧ください。
トピックへのイベントの送信
イベントをトリガーして、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 でできることについて、さらに情報を収集しましょう。