クイック スタート:Azure CLI と Event Grid を使ったカスタム イベントの Web エンドポイントへのルーティング
この記事では、Azure CLI を使用して Azure Event Grid 内にカスタム トピックを作成し、そのカスタム トピックにサブスクライブし、結果を表示するためのイベントをトリガーします。
Note
Azure Event Grid を初めて使用する場合は、このチュートリアルを進める前に「Azure Event Grid とは」を参照してサービスの概要を確認してください。
通常は、イベント データを処理し、アクションを実行するエンドポイントにイベントを送信します。 ただし、この記事では、単純化するために、メッセージを収集して表示する Web アプリにイベントを送信します。
最後に、イベント データが Web アプリに送信されたことを確認します。
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 のトピックは Azure リソースであり、Azure リソース グループに配置する必要があります。 リソース グループは、Azure リソースをまとめてデプロイして管理するための論理上のコレクションです。
az group create コマンドを使用して、リソース グループを作成します。 次の例では、gridResourceGroup という名前のリソース グループを westus2 の場所に作成します。 [試してみる] を選択すると、Azure Cloud Shell ウィンドウが右ペイン内に表示されます。 次に、[コピー] を選択してコマンドをコピーし、Azure Cloud Shell ウィンドウ内にそれを貼り付けて、Enter キーを押してそのコマンドを実行します。 リソース グループの名前と場所を、必要に応じて変更します。
az group create --name gridResourceGroup --location westus2
Event Grid リソース プロバイダーを有効にする
Azure サブスクリプションで Event Grid を使用したことがない場合は、Event Grid リソース プロバイダーを登録する必要がある可能性があります。 以下のプロバイダーを登録するコマンドを実行します。
az provider register --namespace Microsoft.EventGrid
登録完了まで少し時間がかかることがあります。 状態を確認するには、次のコマンドを実行します。
az provider show --namespace Microsoft.EventGrid --query "registrationState"
registrationState
がRegistered
になったら、次に進めることができます。
カスタム トピックの作成
Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。 次の例では、Azure Cloud Shell の Bash を利用し、リソース グループにカスタム トピックが作成されます。 <your-topic-name>
は、トピックの一意の名前に置き換えてください。 カスタム トピック名はドメイン ネーム システム (DNS) エントリの一部であるため、一意である必要があります。 さらに、必ず 3 - 50 文字以内で、a - z、A - Z、0 - 9、および "-" のみを含めます。
次のコマンドをコピーし、トピックの名前を指定し、Enter キーを押してコマンドを実行します。
topicname=<your-topic-name>
az eventgrid topic create
コマンドを使用してカスタム トピックを作成します。az eventgrid topic create --name $topicname -l westus2 -g gridResourceGroup
メッセージ エンドポイントの作成
カスタム トピックをサブスクライブする前に、イベント メッセージ用のエンドポイントを作成しましょう。 通常、エンドポイントは、イベント データに基づくアクションを実行します。 このクイックスタートを簡素化するために、イベント メッセージを表示する構築済みの Web アプリをデプロイします。 デプロイされたソリューションには、App Service プラン、App Service Web アプリ、および GitHub からのソース コードが含まれています。
次のコマンドをコピーし、Web アプリの名前 (Event Grid Viewer サンプル) を指定し、Enter キーを押してコマンドを実行します。
<your-site-name>
は、Web アプリの一意の名前に置き換えてください。 Web アプリ名は、DNS エントリの一部であるため、一意である必要があります。sitename=<your-site-name>
az deployment group create
を実行して Azure Resource Manager テンプレートを使用して Web アプリをデプロイします。az deployment group create \ --resource-group gridResourceGroup \ --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
にアクセスします
現在表示されているメッセージがないサイトが表示されます。
カスタム トピックへのサブスクライブ
どのイベントを追跡し、どこにイベントを送信するかは、Event Grid トピックにサブスクライブすることによって Event Grid に伝えます。 次の例では、作成したカスタム トピックにサブスクライブし、Web アプリの URL をイベント通知のエンドポイントとして渡しています。
Web アプリのエンドポイントには、サフィックス /api/updates/
が含まれている必要があります。
次のコマンドをコピーし、
$sitename
を前の手順の中で作成した Web アプリの名前に置き換え、Enter キーを押してそのコマンドを実行します。endpoint=https://$sitename.azurewebsites.net/api/updates
次のコマンドを実行し、作成したトピックのリソース ID を取得します。
topicresourceid=$(az eventgrid topic show --resource-group gridResourceGroup --name $topicname --query "id" --output tsv)
次のコマンドを実行し、エンドポイントを使用してカスタム トピックのサブスクリプションを作成します。
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
次のステップ
トピックを作成し、イベントをサブスクライブする方法がわかったら、Event Grid でできることについて、さらに情報を収集しましょう。
- Event Grid について
- Blob Storage のイベントをカスタム Web エンドポイントにルーティングする
- Azure Event Grid と Logic Apps で仮想マシンの変更を監視する
- ビッグ データをデータ ウェアハウスにストリーミングする
さまざまなプログラミング言語を使用して Event Grid でイベントを発行および使用する方法については、次のサンプルを参照してください。