クイック スタート:Azure CLI と Event Grid を使ったカスタム イベントの Web エンドポイントへのルーティング

このクイックスタートでは、Azure CLIを使ってAzure Event Gridでカスタムトピックを作成し、そのカスタムトピックにサブスクライブし、サンプルイベントをトリガーして結果を確認します。

通常は、イベント データを処理し、アクションを実行するエンドポイントにイベントを送信します。 しかし、このクイックスタートを簡単にするために、サンプルイベントをウェブアプリに送信し、メッセージを収集・表示します。 終了すると、次の画像のようにウェブアプリ内のイベントデータが表示されます。

Event Grid Viewer サンプルとサンプル イベントを示すスクリーンショット。

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

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。

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

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

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。

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

  • このクイックスタートにはAzure CLIのバージョン2.0.70以降が必要です。 Azure Cloud Shell を使用する場合は、最新バージョンが既にインストールされています。
  • Azure Event Gridが初めての方は、このクイックスタートを始める前にサービスの概要については「What is Azure Event Grid」をご覧ください。

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

Event Grid トピックは、Azureリソースグループに配置しなければならないAzureリソースです。 リソースグループは、Azureリソースを展開・管理するための論理的なコレクションです。

az group create コマンドを使用して、リソース グループを作成します。 次の例では、gridResourceGroup という名前のリソース グループを westus2 の場所に作成します。 リソースグループの名前や場所を変えたい場合は変更しても構いません。

az group create --name gridResourceGroup --location westus2

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

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

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

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

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

カスタム トピックの作成

Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。 以下の例では、Azure Cloud ShellのBashを使ってリソースグループ内のカスタムトピックを作成します。 <your-topic-name> は、トピックの一意の名前に置き換えてください。 カスタム トピック名はドメイン ネーム システム (DNS) エントリの一部であるため、一意である必要があります。 また、3〜50文字の範囲で、値はa-z、A-Z、0-9、「-」のみでなければなりません

  1. 以下のコマンドをコピーし、トピックの名前を指定し、 Enter を選択してコマンドを実行します。

    topicname=<your-topic-name>
    
  2. az eventgrid topic create コマンドを使用してカスタム トピックを作成します。

    az eventgrid topic create --name $topicname -l westus2 -g gridResourceGroup
    

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

カスタム トピックをサブスクライブする前に、イベント メッセージ用のエンドポイントを作成します。 通常、エンドポイントは、イベント データに基づくアクションを実行します。 このクイックスタートを簡単にするために、イベントメッセージを表示する 既成のウェブアプリ を展開してください。 デプロイされたソリューションには、App Service プラン、App Service Web アプリ、および GitHub からのソース コードが含まれています。

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

    sitename=<your-site-name>
    
  2. Azure Resource Managerテンプレートを使ってaz deployment group createを実行してウェブアプリを展開します。

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

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

サイトにはメッセージが表示されていないはずです。

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

どのイベントを追跡し、どこにイベントを送信するかは、Event Grid トピックにサブスクライブすることによって Event Grid に伝えます。 次の例では、作成したカスタム トピックにサブスクライブし、Web アプリの URL をイベント通知のエンドポイントとして渡しています。

Web アプリのエンドポイントには、サフィックス /api/updates/ が含まれている必要があります。

  1. 以下のコマンドをコピーし、 $sitename を前のステップで作成したウェブアプリの名前に置き換え、 Enter を選択してコマンドを実行します。

    endpoint=https://$sitename.azurewebsites.net/api/updates
    
  2. 次のコマンドを実行し、作成したトピックのリソース ID を取得します。

    topicresourceid=$(az eventgrid topic show --resource-group gridResourceGroup --name $topicname --query "id" --output tsv)
    
  3. 次のコマンドを実行し、エンドポイントを使用してカスタム トピックのサブスクリプションを作成します。

    az eventgrid event-subscription create \
      --source-resource-id $topicresourceid \
      --name demoViewerSub \
      --endpoint $endpoint
    

    Web アプリをもう一度表示し、その Web アプリにサブスクリプションの検証イベントが送信されたことに注目します。 目のアイコンを選択してイベント データを展開します。 Event Grid は検証イベントを送信するので、エンドポイントはイベント データを受信することを確認できます。 Web アプリには、サブスクリプションを検証するコードが含まれています。

    イベントグリッドビューアのサンプルとサブスクリプション検証イベントのスクリーンショット。

カスタム トピックへのイベントの送信

イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。 まず、カスタムトピックのURLとキーを取得します。

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

このクイックスタートを簡単にするために、サンプルイベントデータを使ってカスタムトピックに送信してください。 通常、アプリケーションまたは Azure サービスはイベント データを送信します。 次の例では、サンプルのイベント データを作成します。

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"} ]'

JSON の data 要素がイベントのペイロードです。 このフィールドには、適切な形式の JSON であればどのようなものでも格納することができます。 また、高度なルーティングやフィルタリングを行う場合には、subject フィールドを使用することもできます。

cURLはHTTPリクエストを送信するユーティリティです。 このクイックスタートでは、cURLを使ってイベントをトピックに送信します。

curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint

以上でイベントがトリガーされ、そのメッセージが、Event Grid によってサブスクライブ時に構成したエンドポイントに送信されました。 Web アプリを表示して、送信したイベント確認します。

[{
  "id": "1807",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2017-08-10T21:03:07+00:00",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "topic": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/topics/{topic}"
}]

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

このイベントやイベントビューアアプリを引き続き使う予定があるなら、このクイックスタートで作成したリソースを整理しないでください。 それ以外の場合は、このクイックスタートで作成したリソースを削除するコマンドを使ってください。

az group delete --name gridResourceGroup --yes --no-wait

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

さまざまなプログラミング言語でEvent Gridへのイベント公開やイベントの消費について学ぶには、以下のサンプルをご覧ください: