この記事では、 CloudEvents JSON 形式 で Azure Event Grid にイベントを発行し、プッシュ配信モデルを使用してそれらのイベントを配信する手順について説明します。 具体的には、Azure CLI と Curl を使用して Event Grid の名前空間トピックにイベントを発行し、それらのイベントをイベント サブスクリプションから Event Hubs ハンドラーの宛先にプッシュします。 プッシュ配信モデルの詳細については、「 プッシュ配信の概要」を参照してください。
注
Azure CLI Event Grid 拡張機能 では、名前空間とその名前空間に含まれるリソースはまだサポートされていません。 Azure CLI リソースを使用して Event Grid リソースを作成します。
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.0.70 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
Event Grid リソース プロバイダーを有効にする
Azure サブスクリプションで Event Grid を初めて使用する場合は、Event Grid リソース プロバイダーの登録が必要になることがあります。 以下のプロバイダーを登録するコマンドを実行します。
az provider register --namespace Microsoft.EventGrid
登録完了まで少し時間がかかることがあります。 状態を確認するには、次のコマンドを実行します。
az provider show --namespace Microsoft.EventGrid --query "registrationState"
registrationState
がRegistered
になったら、次に進めることができます。
リソース グループを作成する
az group create コマンドで Azure リソース グループを作成します。 このリソース グループを使用して、この記事で作成したすべてのリソースを含めます。
Cloud Shell を使用してコマンドを実行する一般的な手順は次のとおりです。
- [ Cloud Shell を開く ] を選択すると、右側のウィンドウに Azure Cloud Shell ウィンドウが表示されます。
- コマンドをコピーし、Azure Cloud Shell ウィンドウに貼り付けます。
- Enter キーを押してコマンドを実行します。
Azure リソース グループの名前を保持する変数を宣言します。
<your-resource-group-name>
を好きな値に置き換えて、リソース グループの名前を指定します。resource_group="<your-resource-group-name>"
___location="<your-resource-group-___location>"
リソース グループを作成する。 必要に応じて場所を変更します。
az group create --name $resource_group --___location $___location
名前空間の作成
Event Grid 名前空間は、イベントを投稿するユーザー定義エンドポイントを提供します。 次の例では、Azure Cloud Shell で Bash を使用してリソース グループに名前空間を作成します。 名前空間名はドメイン ネーム システム (DNS) エントリの一部であるため、一意である必要があります。 名前空間名は、次の規則を満たしている必要があります。
- 3 ~ 50 文字にする必要があります。
- 地域的に一意である必要があります。
- 使用できる文字は、a から z、A から Z、0 から 9、および - のみ
-
Microsoft
、System
、EventGrid
などの予約済みのキーワード プレフィックスで始めることはできません。
Event Grid 名前空間の名前を保持する変数を宣言します。
<your-namespace-name>
を任意の値に置き換えて、名前空間の名前を指定します。namespace="<your-namespace-name>"
名前空間を作成する。 展開先の場所を変更できます。
az eventgrid namespace create -g $resource_group -n $namespace -l $___location
名前空間トピックの作成
名前空間エンドポイントに発行されたすべてのイベントを保持するために使用されるトピックを作成します。
名前空間トピックの名前を保持する変数を宣言します。
<your-topic-name>
を好きな値に置き換えて、名前空間トピックの名前を指定します。topic="<your-topic-name>"
名前空間トピックを作成します。
az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace
新しい Event Hubs リソースを作成する
名前空間トピック プッシュ配信サブスクリプションのハンドラーの宛先として使用される Event Hubs リソースを作成します。
Event Hubs 名前空間名を保持する変数を宣言します。
eventHubsNamespace="<your-event-hubs-namespace-name>"
Event Hubs 名前空間を作成します。
az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --___location $___location
イベント ハブ名を保持する変数を宣言します。
eventHubsEventHub="<your-event-hub-name>"
次のコマンドを実行して、名前空間にイベント ハブを作成します。
az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub
マネージド ID を使用して Event Hubs にイベントを配信する
マネージド ID を使用して Event Hubs 名前空間のイベント ハブにイベントを配信するには、これらの手順を実行します。
- システム割り当てマネージド ID またはユーザー割り当てマネージド ID: 名前空間を有効にします。 次のセクションに進み、Azure CLI を使用してマネージド ID を有効にする方法を確認してください。
- Event Hubs 名前空間の Azure Event Hubs データ送信者 ロールに ID を追加し、次のセクションに進み、ロールの割り当てを追加する方法を確認します。
- Event Hubs 名前空間で、 [Allow trusted Microsoft services to bypass this firewall](信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可する) 設定を有効にします。
- システム割り当てマネージド ID またはユーザー割り当てマネージド ID を使用するエンドポイントとしてイベント ハブを使用するイベント サブスクリプションを構成します。
Event Grid 名前空間でマネージド ID を有効にする
Event Grid 名前空間でシステム割り当てマネージド ID を有効にします。
az eventgrid namespace update --resource-group $resource_group --name $namespace --identity {type:systemassigned}
Event Grid マネージド ID の Event Hubs にロールの割り当てを追加する
Event Grid 名前空間システムのマネージド ID プリンシパル ID を取得します。
principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)
Event Hubs イベント ハブのリソース ID を取得します。
eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)
Event Grid システム マネージド ID の Event Hubs にロールの割り当てを追加します。
az role assignment create --role "Azure Event Hubs Data Sender" --assignee $principalId --scope $eventHubResourceId
イベント サブスクリプションの作成
新しいプッシュ配信イベント サブスクリプションを作成します。
event_subscription="<your_event_subscription_name>"
az resource create --api-version 2023-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --___location $___location --properties "{\"deliveryConfiguration\":{\"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)
名前空間から最初のキーを取得します。
key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
イベントを公開する
名前空間のホスト名を取得します。 これを使用して、イベントの送信先となる名前空間 HTTP エンドポイントを作成します。 次の操作は、最初に API バージョンの
2023-06-01-preview
で使用できます。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
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 の仕様を参照してください。CURL を使用して、トピックにイベントを送信します。 CURL は、HTTP 要求を送信するユーティリティです。
curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
Azure portal の [Event Hubs 名前空間] ページ に移動し、ページを更新し、グラフの受信メッセージ カウンターにイベントが受信されたことを示していることを確認します。
次のステップ
この記事では、Event Grid 名前空間と Event Hubs リソースを作成して構成しました。 イベント ハブからイベントを受信する手順については、次のチュートリアルを参照してください。
- .NET Core
- ジャワ
- ニシキヘビ
- JavaScript
- 進む
- C (送信のみ)
- Apache Storm (受信のみ)