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

Azure Event Grid は、クラウドのイベント処理サービスです。Azure Event Grid is an eventing service for the cloud. この記事では、Azure portal を使用し、カスタム トピックを作成してそのトピックをサブスクライブし、イベントをトリガーして結果を表示します。In this article, you use the Azure portal 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 PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

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

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.

Azure Portal で次の操作を行います。In the Azure portal:

  1. [サブスクリプション] を選択します。Select Subscriptions.
  2. Event Grid に使用するサブスクリプションを選択します。Select the subscription you're using for Event Grid.
  3. [設定] で、 [リソース プロバイダー] を選択します。Under Settings, select Resource providers.
  4. Microsoft.EventGrid を探します。Find Microsoft.EventGrid.
  5. 登録されていない場合は、 [登録] を選択します。If not registered, select Register.

登録完了まで少し時間がかかることがあります。It may take a moment for the registration to finish. [最新の情報に更新] を選択して、状態を更新します。Select Refresh to update the status. [状態][登録済み] に になったら、次に進めることができます。When Status 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.

  1. Azure ポータルにサインインします。Sign in to Azure portal.

  2. 左側のナビゲーション メニューで [すべてのサービス] を選択します。"Event Grid" を検索し、[Event Grid トピック] を選択します。Select All services on the left navigational menu, search for Event Grid, and select Event Grid Topics.

    [Event Grid トピック] を選択する

  3. [Event Grid トピック] ページで、ツール バーの [+ 追加] を選択します。On the Event Grid Topics page, select + Add on the toolbar.

    Event Grid トピックの追加ボタン

  4. [トピックの作成] ページで、次の手順に従います。On the Create Topic page, follow these steps:

    1. カスタム トピックの一意の名前を指定します。Provide a unique name for the custom topic. トピック名は、DNS エントリによって表されるため、一意である必要があります。The topic name must be unique because it's represented by a DNS entry. 画像に示されている名前は使用しないでください。Don't use the name shown in the image. 代わりに、必ず 3 - 50 文字以内で、a - z、A - Z、0 - 9、および "-" のみを含む独自の名前を作成します。Instead, create your own name - it must be between 3-50 characters and contain only values a-z, A-Z, 0-9, and "-".

    2. Azure サブスクリプションを選択します。Select your Azure subscription.

    3. 既存のリソース グループを選択するか、[新規作成] を選択し、リソース グループ名前を入力します。Select an existing resource group or select Create new, and enter a name for the resource group.

    4. イベント グリッド トピックの場所を選択します。Select a location for the event grid topic.

    5. [イベント スキーマ] フィールドでは、既定値の [イベント グリッド スキーマ] をそのまま使用します。Keep the default value Event Grid Schema for the Event Schema field.

      [トピックの作成] ページ

    6. 作成 を選択します。Select Create.

  5. カスタム トピックが作成されると、成功の通知が表示されます。After the custom topic has been created, you see the successful notification. [リソース グループに移動] を選択します。Select Go to resource group.

    成功の通知を確認

  6. [リソース グループ] ページで、イベント グリッド トピックを選択します。On the Resource Group page, select the event grid topic.

    イベント グリッド トピック リソースの選択

  7. 自分のイベント グリッドの [Event Grid トピック] ページが表示されます。You see the Event Grid Topic page for your event grid. このページは開いたままにしておきます。Keep this page open. 後ほど、このクイック スタートで使用します。You use it later in the quickstart.

    [Event Grid トピック] ホーム ページ

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

カスタム トピックのサブスクリプションを作成する前に、イベント メッセージのエンドポイントを作成します。Before you create a subscription for the custom topic, create an 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.

  1. この記事ページで [Deploy to Azure](Azure にデプロイ) を選択して、ソリューションを自分のサブスクリプションにデプロイします。In the article page, select Deploy to Azure to deploy the solution to your subscription. Azure portal で、パラメーターの値を指定します。In the Azure portal, provide values for the parameters.

  2. デプロイが完了するまでに数分かかる場合があります。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

  3. サイトは表示されますが、イベントはまだ送信されていません。You see the site but no events have been posted to it yet.

    新しいサイトを表示する

カスタム トピックのサブスクライブSubscribe to 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 the events.

  1. 次に、カスタム トピックの [Event Grid トピック] ページで、ツール バーの + [イベント サブスクリプション] を選択します。Now, on the Event Grid Topic page for your custom topic, select + Event Subscription on the toolbar.

    イベント サブスクリプションの追加

  2. [イベント サブスクリプションの作成] ページで、次の手順に従います。On the Create Event Subscription page, follow these steps:

    1. イベント サブスクリプションの名前を入力します。Enter a name for the event subscription.

    2. [エンドポイントのタイプ] には [Webhook] を選択します。Select Web Hook for the Endpoint type.

    3. [エンドポイントの選択] を選択します。Choose Select an endpoint.

      イベント サブスクリプションの値の指定

    4. Web hook エンドポイントに対して、Web アプリの URL を入力し、ホーム ページの URL に api/updates を追加します。For the web hook endpoint, provide the URL of your web app and add api/updates to the home page URL. [選択の確認] を選択します。Select Confirm Selection.

      エンドポイントの URL の指定

    5. 再び [イベント サブスクリプションの作成] ページで、[作成] を選択します。Back on the Create Event Subscription page, select Create.

  3. 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 topic

では、イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。Now, let's trigger an event to see how Event Grid distributes the message to your endpoint. Azure CLI または PowerShell を使用して、テスト イベントをカスタム トピックに送信します。Use either Azure CLI or PowerShell to send a test event to your custom topic. 通常はイベント データをアプリケーションまたは Azure サービスから送信することになります。Typically, an application or Azure service would send the event data.

最初の例では、Azure CLI を使用しています。The first example uses Azure CLI. この例では、カスタム トピックの URL とキー、およびサンプル イベント データを取得します。It gets the URL and key for the custom topic, and sample event data. <topic name> には、実際のカスタム トピック名を使用してください。Use your custom topic name for <topic name>. これによりサンプルのイベント データが作成されます。It creates sample event data. 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.

Azure CLIAzure CLI

  1. Azure portal で、[Cloud Shell] を選択します。In the Azure portal, select Cloud Shell. Cloud Shell ウィンドウの左上隅の [Bash] を選択します。Select Bash in the top-left corner of the Cloud Shell window.

    Cloud Shell - Bash

  2. 次のコマンドを実行して、トピックのエンドポイントを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名リソース グループ名を更新してください。Run the following command to get the endpoint for the topic: After you copy and paste the command, update the topic name and resource group name before you run the command.

    endpoint=$(az eventgrid topic show --name <topic name> -g <resource group name> --query "endpoint" --output tsv)
    
  3. 次のコマンドを実行して、カスタム トピックのキーを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名リソース グループ名を更新してください。Run the following command to get the key for the custom topic: After you copy and paste the command, update the topic name and resource group name before you run the command.

    key=$(az eventgrid topic key list --name <topic name> -g <resource group name> --query "key1" --output tsv)
    
  4. イベント定義を含む次のステートメントをコピーし、Enter キーを押します。Copy the following statement with the event definition, and press ENTER.

    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"} ]'
    
  5. 次の Curl コマンドを実行して、イベントを送信します。Run the following Curl command to post the event:

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

Azure PowerShellAzure PowerShell

2 番目の例では、PowerShell を使用して、同様の手順を実行します。The second example uses PowerShell to perform similar steps.

  1. Azure portal で、[Cloud Shell] を選択します。In the Azure portal, select Cloud Shell. Cloud Shell ウィンドウの左上隅の [PowerShell] を選択します。Select PowerShell in the top-left corner of the Cloud Shell window. 「Azure CLI」セクションにあるサンプルの Cloud Shell ウィンドウの画像を参照してください。See the sample Cloud Shell window image in the Azure CLI section.

  2. 次のコマンドを実行して、トピックのエンドポイントを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名リソース グループ名を更新してください。Run the following command to get the endpoint for the topic: After you copy and paste the command, update the topic name and resource group name before you run the command.

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName <resource group name> -Name <topic name>).Endpoint
    
  3. 次のコマンドを実行して、カスタム トピックのキーを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名リソース グループ名を更新してください。Run the following command to get the key for the custom topic: After you copy and paste the command, update the topic name and resource group name before you run the command.

    $keys = Get-AzEventGridTopicKey -ResourceGroupName gridResourceGroup -Name <topic name>
    
  4. イベントを準備します。Prepare the event. ステートメントをコピーし、Cloud Shell ウィンドウ内で実行します。Copy and run the statements in the Cloud Shell window.

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct body using Hashtable
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert event body from Hashtable to JSON Object
    #Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  5. Invoke-WebRequest コマンドレットを使用して、イベントを送信します。Use the Invoke-WebRequest cmdlet to send the event.

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    

Event Grid ビューアーでの確認Verify in the Event Grid Viewer

以上でイベントがトリガーされ、そのメッセージが、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": "974",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2019-03-28T01:11:59+00:00",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "topic": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myegridrg/providers/Microsoft.EventGrid/topics/myegridtopic"
}

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

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

  1. 左側のメニューの [リソース グループ] を選択します。Select Resource Groups on the left menu. 左側のメニューにこれが表示されていない場合は、左側のメニューの [すべてのサービス] を選択し、[リソース グループ] を選択します。If you don't see it on the left menu, select All Services on the left menu, and select Resource Groups.

  2. リソース グループを選択して [リソース グループ] ページを開きます。Select the resource group to launch the Resource Group page.

  3. ツール バーの [リソース グループの削除] を選択します。Select Delete resource group on the toolbar.

  4. リソース グループの名前を入力して削除を確認し、[削除] を選択します。Confirm deletion by entering the name of the resource group, and select Delete.

    リソース グループ

    画像に表示されている他のリソース グループは、Cloud Shell ウィンドウによって作成および使用されたものです。The other resource group you see in the image was created and used by the Cloud Shell window. 後で Cloud Shell ウィンドウを使用しない場合はこれを削除してください。Delete it if you don't plan to use the Cloud Shell window later.

次の手順Next steps

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