クイックスタート: 名前空間トピックを使用してイベントを Azure Event Hubs に配信する (Azure CLI)

このクイックスタートでは、Azure CLIを使ってイベントをCloudEvents JSON形式のEvent Grid名前空間トピックに公開し、それらのイベントをAzure Event Hubsハンドラーにプッシュします。 イベントグリッドとイベントハブのリソースを作成し、安全な配信のためのマネージドIDを設定し、cURLを使ってサンプルイベントを送信します。

Azure Event Gridの名前空間トピックを使えば、イベントを公開し、Azure Event Hubsなどのハンドラーに配信できます。 イベントハブへのイベント配信は、大量のイベントストリームやテレメトリを収集し、下流の分析、保存、さらなる処理を行う際に有用です。

Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。

[前提条件]

  • 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.53.0以降が必要です。 az eventgrid namespaceコマンドはeventgrid拡張機能(バージョン2.51.0以降)から来ており、これらのコマンドを初めて実行したときに自動的にインストールされます。 Azure Cloud Shell を使用する場合は、最新バージョンが既にインストールされています。

Event Grid リソース プロバイダーを有効にする

  1. Azure サブスクリプションで Event Grid を初めて使用する場合は、Event Grid リソース プロバイダーの登録が必要になることがあります。 以下のプロバイダーを登録するコマンドを実行します。

    az provider register --namespace Microsoft.EventGrid
    
  2. 登録完了まで少し時間がかかることがあります。 状態を確認するには、次のコマンドを実行します。

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    registrationStateRegistered になったら、次に進めることができます。

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

az group create コマンドで Azure リソース グループを作成します。 このリソースグループを使って、クイックスタートで作成したすべてのリソースを保管してください。

  1. Azure リソース グループの名前を保持する変数を宣言します。 <your-resource-group-name>を好きな値に置き換えて、リソース グループの名前を指定します。

    resource_group="<your-resource-group-name>"
    
    location="<your-resource-group-location>"
    
  2. リソース グループを作成する。 必要に応じて場所を変更します。

    az group create --name $resource_group --location $location
    

Event Grid 名前空間を作成する

Event Grid 名前空間は、イベントを投稿するユーザー定義エンドポイントを提供します。 以下の例は、Azure Cloud ShellのBashを使ってリソースグループ内に名前空間を作成します。 名前空間名はドメイン ネーム システム (DNS) エントリの一部であるため、一意である必要があります。 名前空間名は、次の規則を満たしている必要があります。

  • 3文字から50文字の間です。
  • 地域的に一意である必要があります。
  • 許可される文字はa-z、A-Z、0-9、そして-です。
  • MicrosoftSystemEventGridなどの予約済みのキーワード プレフィックスで始めることはできません。
  1. Event Grid 名前空間の名前を保持する変数を宣言します。 <your-namespace-name>を任意の値に置き換えて、名前空間の名前を指定します。

    namespace="<your-namespace-name>"
    
  2. 名前空間を作成する。 展開先の場所を変更できます。

    az eventgrid namespace create -g $resource_group -n $namespace -l $location
    

イベントグリッドの名前空間トピックを作成する

名前空間エンドポイントに公開されたすべてのイベントを保持するトピックを作成します。

  1. 名前空間トピックの名前を保持する変数を宣言します。 <your-topic-name>を好きな値に置き換えて、名前空間トピックの名前を指定します。

    topic="<your-topic-name>"
    
  2. 名前空間トピックを作成します。

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

新しい Event Hubs リソースを作成する

名前空間トピックのプッシュ配信サブスクリプションのハンドラー宛先として使うEvent Hubsリソースを作成します。

  1. Event Hubs 名前空間名を保持する変数を宣言します。

    eventHubsNamespace="<your-event-hubs-namespace-name>"
    
  2. Event Hubs 名前空間を作成します。

    az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --location $location
    
  3. イベント ハブ名を保持する変数を宣言します。

    eventHubsEventHub="<your-event-hub-name>"
    
  4. 次のコマンドを実行して、名前空間にイベント ハブを作成します。

    az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub
    

マネージドIDを使用してイベントハブにイベントを配信

マネージドアイデンティティを使ってイベントハブの名前空間内のイベントハブにイベントを配信するには、以下の手順に従ってください。

  1. システム割り当てマネージド ID またはユーザー割り当てマネージド ID: 名前空間を有効にします。 Azure CLIを使ってマネージドIDを有効にする方法については、次のセクションへ進み続けてください。
  2. Event Hubs 名前空間で Azure Event Hubs データ送信者ロールに ID を追加します。 役割割り当ての追加方法については、次のセクションをご覧ください。
  3. Event Hubs 名前空間で、 [Allow trusted Microsoft サービス to bypass this firewall](信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可する) 設定を有効にします
  4. システム割り当てマネージド ID またはユーザー割り当てマネージド ID を使用するエンドポイントとしてイベント ハブを使用するイベント サブスクリプションを構成します。

Event Grid 名前空間でマネージド ID を有効にする

イベントグリッド名前空間でシステム割り当て管理IDを有効にします。

az eventgrid namespace update --resource-group $resource_group --name $namespace --identity "{type:SystemAssigned}"

Event Grid マネージド ID の Event Hubs にロールの割り当てを追加する

  1. Event Grid 名前空間システムのマネージド ID プリンシパル ID を取得します。

    principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)
    
  2. Event Hubs イベント ハブのリソース ID を取得します。

    eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)
    
  3. Event Grid システム マネージド ID の Event Hubs にロールの割り当てを追加します。

    az role assignment create --role "Azure Event Hubs Data Sender" --assignee $principalId --scope $eventHubResourceId
    

イベント サブスクリプションの作成

Event GridのマネージドIDを使ってイベントハブにイベントを配信するプッシュデリバリーイベントサブスクリプションを作成しましょう。

event_subscription="<your-event-subscription-name>"
az eventgrid namespace topic event-subscription create --resource-group $resource_group --namespace-name $namespace --topic-name $topic --name $event_subscription --delivery-configuration "{deliveryMode:Push,push:{maxDeliveryCount:10,deliveryWithResourceIdentity:{identity:{type:SystemAssigned},destination:{endpointType:EventHub,properties:{resourceId:$eventHubResourceId}}}}}"

ネームスペーストピックにテストイベントを送信してください

次に、このセクションの手順に従って、名前空間のトピックにサンプル イベントを送信します。

名前空間のアクセス キーを一覧表示する

  1. 作成した名前空間に関連付けられているアクセス キーを取得します。 イベントを公開する際に認証に使うのが良いでしょう。 キーを一覧表示するには、最初に完全な名前空間リソース ID が必要です。 次のコマンドを実行して取得します。

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. 名前空間から最初のキーを取得します。

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

イベントを公開する

  1. 名前空間のホスト名を取得します。 イベントを送信する名前空間のHTTPエンドポイントを合成するために使います。

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. CloudEvents 準拠のサンプル イベントを作成します。

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    data要素は、イベントのペイロードです。 このフィールドには、適切な形式の JSON であればどのようなものでも格納することができます。 イベントに含まれるプロパティ(コンテキスト属性とも呼ばれる)の詳細については、 CloudEvents 仕様をご覧ください。

  3. cURLを使ってイベントをトピックに送信してください。 cURLはHTTPリクエストを送信するユーティリティです。

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

    AzureポータルでEvent Hubsの名前空間ページを開き、ページを更新し、チャート内の受信メッセージカウンターにイベントが受信されているか確認してください。

    イベントが受信されたことを示すグラフを含む [イベント ハブ] ページを示すスクリーンショット。

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

作成したリソースが不要なら、追加料金を避けるために削除してください。 リソースグループとその中に含まれるすべてのリソースを削除してください:

az group delete --name $resource_group

次のステップ

このクイックスタートでは、イベントグリッドの名前空間とイベントハブリソースを作成・設定し、イベントをイベントハブにプッシュしました。 イベントハブからイベントを受け取る方法を学びたい方は、以下のチュートリアルをご覧ください: