クイック スタート: Azure CLI と Event Grid を使ったカスタム イベントの Web エンドポイントへのルーティングQuickstart: Route custom events to web endpoint with Azure CLI and Event Grid

Azure Event Grid は、クラウドのイベント処理サービスです。Azure Event Grid is an eventing service for the cloud. この記事では、Azure CLI からカスタム トピックを作成してカスタム トピックにサブスクライブし、イベントをトリガーして結果を表示します。In this article, you use the Azure CLI to create a custom topic, subscribe to the custom topic, and trigger the event to view the result. 通常は、イベント データを処理し、アクションを実行するエンドポイントにイベントを送信します。Typically, you send events to an endpoint that processes the event data and takes actions. ただし、この記事では、単純化するために、メッセージを収集して表示する Web アプリにイベントを送信します。However, to simplify this article, you send the events to a web app that collects and displays the messages.

最後に、イベント データが Web アプリに送信されたことを確認します。When you're finished, you see that the event data has been sent to the web app.

結果の表示

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

Azure Cloud Shell を使用するUse Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell では、bashPowerShell のいずれかを使用して Azure サービスを操作できます。Cloud Shell lets you use either bash or PowerShell to work with Azure services. ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell を起動するには:To launch Azure Cloud Shell:

オプションOption 例とリンクExample/Link
コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. [試してみる] を選択しても、コードは Cloud Shell に自動的にコピーされません。Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
https://shell.azure.com に移動するか、 [Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. 新しいウィンドウで Cloud Shell を起動するLaunch Cloud Shell in a new window
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the top-right menu bar in the Azure portal. Azure Portal の [Cloud Shell] ボタン

Azure Cloud Shell でこの記事のコードを実行するには:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell を起動します。Launch Cloud Shell.
  2. [コピー] ボタンを選択して、コード ブロックをコードにコピーします。Select the Copy button on a code block to copy the code.
  3. Windows と Linux では Ctrl + Shift + V キー、macOS では Cmd + Shift + V キーを使用して、コードを Cloud Shell セッションに貼り付けます。Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Enter キーを押して、コードを実行します。Press Enter to run the code.

CLI をローカルにインストールして使用することを選択した場合、この記事では、最新バージョンの Azure CLI (2.0.24 以降) が実行されている必要があります。If you choose to install and use the CLI locally, this article requires that you are running the latest version of Azure CLI (2.0.24 or later). バージョンを確認するには、az --version を実行します。To find the version, run az --version. インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。If you need to install or upgrade, see Install Azure CLI.

Cloud Shell を使用していない場合は、先に az login でサインインする必要があります。If you aren't using Cloud Shell, you must first sign in using az login.

リソース グループの作成Create a resource group

Event Grid のトピックは Azure リソースであり、Azure リソース グループに配置する必要があります。Event Grid topics are Azure resources, and must be placed in an Azure resource group. リソース グループは、Azure リソースをまとめてデプロイして管理するための論理上のコレクションです。The resource group is a logical collection into which Azure resources are deployed and managed.

az group create コマンドでリソース グループを作成します。Create a resource group with the az group create command.

次の例では、gridResourceGroup という名前のリソース グループを westus2 の場所に作成します。The following example creates a resource group named gridResourceGroup in the westus2 location.

az group create --name gridResourceGroup --location westus2

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

Azure サブスクリプションで Event Grid を使用したことがない場合は、Event Grid リソース プロバイダーを登録する必要がある可能性があります。If you haven't previously used Event Grid in your Azure subscription, you may need to register the Event Grid resource provider. 以下のプロバイダーを登録するコマンドを実行します。Run the following command to register the provider:

az provider register --namespace Microsoft.EventGrid

登録完了まで少し時間がかかることがあります。It may take a moment for the registration to finish. 状態をチェックするには、次を実行します。To check the status, run:

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

registrationStateRegistered になったら、次に進めることができます。When registrationState is Registered, you're ready to continue.

カスタム トピックの作成Create a custom topic

Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。An event grid topic provides a user-defined endpoint that you post your events to. 次の例では、リソース グループにカスタム トピックを作成します。The following example creates the custom topic in your resource group. <your-topic-name> は、トピックの一意の名前に置き換えてください。Replace <your-topic-name> with a unique name for your topic. カスタム トピック名は、DNS エントリの一部であるため、一意である必要があります。The custom topic name must be unique because it's part of the DNS entry. さらに、必ず 3 - 50 文字以内で、a - z、A - Z、0 - 9、および "-" のみを含めます。Additionally, it must be between 3-50 characters and contain only values a-z, A-Z, 0-9, and "-"

topicname=<your-topic-name>

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

メッセージ エンドポイントの作成Create a message endpoint

カスタム トピックをサブスクライブする前に、イベント メッセージ用のエンドポイントを作成しましょう。Before subscribing to the custom topic, let's create the endpoint for the event message. 通常、エンドポイントは、イベント データに基づくアクションを実行します。Typically, the endpoint takes actions based on the event data. このクイック スタートを簡素化するために、イベント メッセージを表示する構築済みの Web アプリをデプロしします。To simplify this quickstart, you deploy a pre-built web app that displays the event messages. デプロイされたソリューションには、App Service プラン、App Service Web アプリ、および GitHub からのソース コードが含まれています。The deployed solution includes an App Service plan, an App Service web app, and source code from GitHub.

<your-site-name> は、Web アプリの一意の名前に置き換えてください。Replace <your-site-name> with a unique name for your web app. Web アプリ名は、DNS エントリの一部であるため、一意である必要があります。The web app name must be unique because it's part of the DNS entry.

sitename=<your-site-name>

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

デプロイが完了するまでに数分かかる場合があります。The deployment may take a few minutes to complete. デプロイが成功した後で、Web アプリを表示して、実行されていることを確認します。After the deployment has succeeded, view your web app to make sure it's running. Web ブラウザーで https://<your-site-name>.azurewebsites.net にアクセスしますIn a web browser, navigate to: https://<your-site-name>.azurewebsites.net

現在表示されているメッセージがないサイトが表示されます。You should see the site with no messages currently displayed.

カスタム トピックへのサブスクライブSubscribe to a custom topic

どのイベントを追跡し、どこにイベントを送信するかは、イベント グリッド トピックにサブスクライブすることによって Event Grid に伝えます。You subscribe to an event grid topic to tell Event Grid which events you want to track and where to send those events. 次の例では、作成したカスタム トピックにサブスクライブし、Web アプリの URL をイベント通知のエンドポイントとして渡しています。The following example subscribes to the custom topic you created, and passes the URL from your web app as the endpoint for event notification.

Web アプリのエンドポイントには、サフィックス /api/updates/ が含まれている必要があります。The endpoint for your web app must include the suffix /api/updates/.

endpoint=https://$sitename.azurewebsites.net/api/updates

az eventgrid event-subscription create \
  --source-resource-id "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/topics/$topicname" 
  --name demoViewerSub 
  --endpoint $endpoint
  

Web アプリをもう一度表示し、その Web アプリにサブスクリプションの検証イベントが送信されたことに注目します。View your web app again, and notice that a subscription validation event has been sent to it. 目のアイコンを選択してイベント データを展開します。Select the eye icon to expand the event data. Event Grid は検証イベントを送信するので、エンドポイントはイベント データを受信することを確認できます。Event Grid sends the validation event so the endpoint can verify that it wants to receive event data. Web アプリには、サブスクリプションを検証するコードが含まれています。The web app includes code to validate the subscription.

サブスクリプション イベントの表示

カスタム トピックへのイベントの送信Send an event to your custom topic

イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。Let's trigger an event to see how Event Grid distributes the message to your endpoint. まず、カスタム トピックの URL とキーを取得します。First, let's get the URL and key for the custom topic.

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)

この記事では、単純化するために、サンプル イベント データをカスタム トピックに送信します。To simplify this article, you use sample event data to send to the custom topic. 通常はイベント データをアプリケーションまたは Azure サービスから送信することになります。Typically, an application or Azure service would send the event data. 次の例では、サンプルのイベント データを作成します。The following example creates sample event data:

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 要素がイベントのペイロードです。The data element of the JSON is the payload of your event. このフィールドには、適切な形式の JSON であればどのようなものでも格納することができます。Any well-formed JSON can go in this field. また、高度なルーティングやフィルタリングを行う場合には、subject フィールドを使用することもできます。You can also use the subject field for advanced routing and filtering.

CURL は、HTTP 要求を送信するユーティリティです。CURL is a utility that sends HTTP requests. この記事では、CURL を使用して、イベントをトピックに送信します。In this article, use CURL to send the event to the topic.

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

以上でイベントがトリガーされ、そのメッセージが、Event Grid によってサブスクライブ時に構成したエンドポイントに送信されました。You've triggered the event, and Event Grid sent the message to the endpoint you configured when subscribing. Web アプリを表示して、送信したイベント確認します。View your web app to see the event you just sent.

[{
  "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}"
}]

リソースのクリーンアップClean up resources

引き続きこのイベントまたはイベント ビューアー アプリを使用する場合は、この記事で作成したリソースをクリーンアップしないでください。If you plan to continue working with this event or the event viewer app, don't clean up the resources created in this article. それ以外の場合は、次のコマンドを使用して、この記事で作成したリソースを削除します。Otherwise, use the following command to delete the resources you created in this article.

az group delete --name gridResourceGroup

次の手順Next steps

トピックを作成し、イベントをサブスクライブする方法がわかったら、Event Grid でできることについて、さらに情報を収集しましょう。Now that you know how to create topics and event subscriptions, learn more about what Event Grid can help you do: