名前空間トピックを使用して Webhook にイベントを配信する - Azure CLI (プレビュー)

この記事では、CloudEvents JSON 形式でイベントを Azure Event Grid に発行し、プル配信モデルを使用してそれらのイベントを配信する詳細な手順について説明します。 具体的には、Azure CLI と Curl を使って、イベントを Event Grid の名前空間トピックに発行し、それらのイベントをイベント サブスクリプションから Webhook ハンドラーの宛先にプッシュします。 プッシュ配信モデルの詳細については、プッシュ配信の概要に関するページを参照してください。

Note

Azure CLI Event Grid 拡張機能では、名前空間とそこに含まれるリソースはまだサポートされていません。 Azure CLI リソースを使用して Event Grid リソースを作成します。

Azure サブスクリプションをお持ちでない場合は、開始する前に 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 リソース プロバイダーを有効にする

  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 リソース グループを作成します。 このリソース グループを使用して、この記事で作成したすべてのリソースを含めます。

Cloud Shell を使用してコマンドを実行する一般的な手順は次のとおりです。

  • [Cloud Shell を開く] を選択すると、右側のペインに Azure Cloud Shell ウィンドウが表示されます。
  • コマンドをコピーして Azure Cloud Shell ウィンドウに貼り付けます。
  • Enter キーを押してコマンドを実行します。
  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 名前空間は、イベントの投稿先となるユーザー定義のエンドポイントになります。 次の例では、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 
    

メッセージ エンドポイントの作成

名前空間トピックをサブスクライブする前に、イベント メッセージ用のエンドポイントを作成しましょう。 通常、エンドポイントは、イベント データに基づくアクションを実行します。 このクイックスタートを簡素化するために、イベント メッセージを表示する構築済みの Web アプリをデプロイします。 デプロイされたソリューションには、App Service プラン、App Service Web アプリ、および GitHub からのソース コードが含まれています。

  1. 次のコマンドをコピーし、Web アプリの名前 (Event Grid Viewer サンプル) を指定し、Enter キーを押してコマンドを実行します。 <your-site-name> は、Web アプリの一意の名前に置き換えてください。 Web アプリ名は、DNS エントリの一部であるため、一意である必要があります。

    sitename="<your-site-name>"
    
  2. az deployment group create を実行して Azure Resource Manager テンプレートを使用して Web アプリをデプロイします。

    az deployment group create \
      --resource-group $resource_group \
      --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
      --parameters siteName=$sitename hostingPlanName=viewerhost
    

デプロイが完了するまでに数分かかることがあります。 デプロイが成功した後で、Web アプリを表示して、実行されていることを確認します。 Web ブラウザーで https://<your-site-name>.azurewebsites.net にアクセスします。 現在表示されているメッセージがないサイトが表示されます。

Azure Event Grid ビューアー Webhook にイベントを配信する

Azure Event Grid ビューアーの Webhook を使って、名前空間へのプッシュ配信イベント サブスクリプションを作成します。

  1. イベント サブスクリプションの名前を保持する変数を定義します。

    event_subscription="<your_event_subscription_name>"
    
  2. EVENTGRIDWEBSITENAME を Event Grid ビューアー Web サイトの名前に置き換えます。 (例: contosoegridviewer)。

    az resource create --api-version 2024-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --location $location --properties "{\"eventDeliverySchema\": \"CloudEventSchemaV1_0\",\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"destination\":{\"endpointType\":\"WebHook\",\"properties\":{\"endpointUrl\":\"https:\/\/$sitename.azurewebsites.net\/api/updates\"}}}}}"
    

トピックにイベントを送信する

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

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

  1. 作成した名前空間に関連付けられているアクセス キーを取得します。 イベントの発行時の認証には、そのうちの 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 エンドポイントを作成します。 次の操作は、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
    
  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 Grid ビューアーがイベントを受信したことを確認する

Azure Event Grid ビューアー Web アプリに、Event Grid から受信したイベントが表示されていることを確認します。

受信したサンプル イベントを含む Azure Event Grid ビューアーを示すスクリーンショット。

このクイックスタートでは、イベント ハンドラーとして Webhook を使いました。 Azure イベント ハブをイベント ハンドラーとして使うクイックスタートについては、「名前空間トピックを使用して Azure Event Hubs にイベントを配信する」をご覧ください。