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

Event Grid は、Azure のさまざまなサービスおよびアプリケーション全体でイベントの管理を簡単にするフル マネージド サービスです。 イベント駆動型でサーバーレスのアプリケーションの作成を簡単にします。 サービスの概要については、Event Grid の概要に関するページを参照してください。

この記事では、Azure portal を使用して次のタスクを行います。

  1. カスタム トピックを作成します。
  2. カスタム トピックをサブスクライブします。
  3. イベントをトリガーします。
  4. 結果を表示します。 通常は、イベント データを処理し、アクションを実行するエンドポイントにイベントを送信します。 ただし、この記事では、単純化するために、メッセージを収集して表示する Web アプリにイベントを送信します。

前提条件

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

Event Grid リソース プロバイダーを登録する

これまでに Event Grid を使用したことがない場合は、Event Grid リソース プロバイダーを登録する必要があります。 Event Grid を使用したことがある場合は、次のセクションに進んでください。

Azure portal で、次の手順を実行します。

  1. 左側のメニューで [サブスクリプション] を選択します。

  2. サブスクリプションの一覧から Event Grid に使用するサブスクリプションを選択します。

  3. [サブスクリプション] ページで、左側のメニューの [設定] の下の [リソース プロバイダー] を選択します。

  4. Microsoft.EventGrid を検索し、[状態][未登録] であることを確認します。

  5. プロバイダーの一覧で [Microsoft.EventGrid] を選択します。

  6. コマンド バーの [登録] を選択します。

    Image showing the registration of Microsoft.EventGrid provider with the Azure subscription.

  7. 最新の情報に更新して、Microsoft.EventGrid の状態が [登録済み] に変更されたことを確認します。

    Image showing the successful registration of Microsoft.EventGrid provider with the Azure subscription.

カスタム トピックの作成

Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。

  1. Azure ポータルにサインインします。

  2. トピックの検索バーに「Event Grid トピック」と入力し、ドロップ ダウン リストから [Event Grid トピック] を選択します。

    Screenshot showing the Azure port search bar to search for Event Grid topics.

  3. [Event Grid トピック] ページで、ツール バーの [+ 作成] を選択します。

    Screenshot showing the Create Topic button on Event Grid topics page.

  4. [トピックの作成] ページで、次の手順に従います。

    1. Azure サブスクリプションを選択します。

    2. 既存のリソース グループを選択するか、 [新規作成] を選択し、リソース グループ名前を入力します。

    3. カスタム トピックの一意の名前を指定します。 トピック名は、DNS エントリによって表されるため、一意である必要があります。 画像に示されている名前は使用しないでください。 代わりに、必ず 3 - 50 文字以内で、a - z、A - Z、0 - 9、および "-" のみを含む独自の名前を作成します。

    4. Event Grid トピックの場所を選択します。

    5. ページ下部にある [確認と作成] を選択します。

      Create Topic page

    6. [トピックの作成] ページの [確認と作成] タブで、 [作成] を選択します。

      Review settings and create

  5. デプロイが正常に完了したら、 [リソースに移動] を選択して、トピックの [Event Grid トピック] ページに移動します。 このページは開いたままにしておきます。 後ほど、このクイック スタートで使用します。

    Screenshot showing the Event Grid topic home page.

    Note

    クイックスタートをシンプルにするため、トピックの作成には [基本] ページのみを使います。 ウィザードの他のページでネットワーク、セキュリティ、データ所在地の設定を構成する詳細な手順については、カスタム トピックの作成に関するページを参照してください。

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

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

  1. この記事ページで [Deploy to Azure](Azure にデプロイ) を選択して、ソリューションを自分のサブスクリプションにデプロイします。 Azure portal で、パラメーターの値を指定します。

    Button to deploy the Resource Manager template to Azure.

  2. [カスタム デプロイ] ページで、次の手順を実行します。

    1. [リソース グループ] で、ストレージ アカウントの作成時に作成したリソース グループを選択します。 チュートリアルの完了後は、リソース グループを削除して容易にクリーンアップすることができます。

    2. [サイト名] に、Web アプリの名前を入力します。

    3. Web アプリのホストに使用する App Service プランの名前を [ホスティング プラン名] に入力します。

    4. [Review + create](レビュー + 作成) を選択します。

      Screenshot showing the Custom deployment page.

  3. [確認および作成] ページで、 [作成] を選択します。

  4. デプロイが完了するまでに数分かかる場合があります。 ポータルでアラート (ベルのアイコン) を選択し、 [リソース グループに移動] を選択します。

    Screenshot showing the successful deployment message with a link to navigate to the resource group.

  5. [リソース グループ] ページのリソースの一覧で、作成した Web アプリを選択します。 この一覧には、App Service プランとストレージ アカウントも表示されます。

    Screenshot that shows the Resource Group page with the deployed resources.

  6. Web アプリの [App Service] ページで、Web サイトに移動するための URL を選択します。 この URL は、https://<your-site-name>.azurewebsites.net 形式になっている必要があります。

    Screenshot that shows the App Service page with the link to the site highlighted.

  7. サイトは表示されますが、イベントはまだ送信されていないことを確認します。

    Screenshot that shows the Event Grid Viewer sample app.

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

どのイベントを追跡し、どこにイベントを送信するかは、Event Grid トピックをサブスクライブすることによって Event Grid に伝えます。

  1. 次に、カスタム トピックの [Event Grid トピック] ページで、ツール バーの + [イベント サブスクリプション] を選択します。

    Add event subscription button

  2. [イベント サブスクリプションの作成] ページで、次の手順に従います。

    1. イベント サブスクリプションの名前を入力します。

    2. [エンドポイントのタイプ] には [Webhook] を選択します。

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

      Provide event subscription values

    4. Web hook エンドポイントに対して、Web アプリの URL を入力し、ホーム ページの URL に api/updates を追加します。 [選択の確認] を選択します。

      Provide endpoint URL

    5. 再び [イベント サブスクリプションの作成] ページで、 [作成] を選択します。

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

    Screenshot of the Event Grid Viewer app with the Subscription Validated event.

トピックへのイベントの送信

では、イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。 Azure CLI または PowerShell を使用して、テスト イベントをカスタム トピックに送信します。 通常はイベント データをアプリケーションまたは Azure サービスから送信することになります。

最初の例では、Azure CLI を使用しています。 この例では、カスタム トピックの URL とキー、およびサンプル イベント データを取得します。 <topic name> には、実際のカスタム トピック名を使用してください。 これによりサンプルのイベント データが作成されます。 JSON の data 要素がイベントのペイロードです。 このフィールドには、適切な形式の JSON であればどのようなものでも格納することができます。 また、高度なルーティングやフィルタリングを行う場合には、subject フィールドを使用することもできます。 CURL は、HTTP 要求を送信するユーティリティです。

Azure CLI

  1. Azure portal で、 [Cloud Shell] を選択します。 Cloud Shell が Web ブラウザーの下部ペインに表示されます。

    Select Cloud Shell icon

  2. Cloud Shell ウィンドウの左上隅の [Bash] を選択します。

    Screenshot that shows the Cloud Shell with Bash selected in the top-left corner.

  3. 次のコマンドを実行して、トピックのエンドポイントを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名リソース グループ名を更新してください。 このトピック エンドポイントにサンプル イベントを発行します。

    endpoint=$(az eventgrid topic show --name <topic name> -g <resource group name> --query "endpoint" --output tsv)
    
  4. 次のコマンドを実行して、カスタム トピックのキーを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名リソース グループ名を更新してください。 これは、Event Grid トピックの主キーです。 このキーを Azure portal から取得するには、 [Event Grid トピック] ページの [アクセス キー] タブに切り替えます。 カスタム トピックにイベントを投稿できるようにするには、アクセス キーが必要です。

    key=$(az eventgrid topic key list --name <topic name> -g <resource group name> --query "key1" --output tsv)
    
  5. イベント定義を含む次のステートメントをコピーし、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"} ]'
    
  6. 次の Curl コマンドを実行して、イベントを送信します。このコマンドでは、aeg-sas-key ヘッダーは前に取得したアクセス キーに設定されています。

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

Azure PowerShell

2 番目の例では、PowerShell を使用して、同様の手順を実行します。

  1. Azure portal で [Cloud Shell] を選択します (または https://shell.azure.com/ にアクセスします)。 Cloud Shell が Web ブラウザーの下部ペインに表示されます。

    Select Cloud Shell icon

  2. Cloud Shell で、Cloud Shell ウィンドウの左上隅の [PowerShell] を選択します。 「Azure CLI」セクションにあるサンプルの Cloud Shell ウィンドウの画像を参照してください。

  3. 次の変数を設定します。 コマンドをコピーして貼り付けた後、トピック名リソース グループ名を更新してから、次のコマンドを実行します。

    [リソース グループ] :

    $resourceGroupName = "<resource group name>"
    

    Event Grid トピック名:

    $topicName = "<topic name>"
    
  4. 次のコマンドを実行して、トピックのエンドポイントキーを取得します。

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  5. イベントを準備します。 ステートメントをコピーし、Cloud Shell ウィンドウ内で実行します。

    $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)+"]"
    
  6. Invoke-WebRequest コマンドレットを使用して、イベントを送信します。

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

Event Grid ビューアーでの確認

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

Event Grid Viewer

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

引き続きこのイベントを使用する場合は、この記事で作成したリソースをクリーンアップしないでください。 それ以外の場合は、この記事で作成したリソースを削除してください。

  1. 左側のメニューの [リソース グループ] を選択します。 左側のメニューにこれが表示されていない場合は、左側のメニューの [すべてのサービス] を選択し、 [リソース グループ] を選択します。

    Screenshot that shows the Resource Groups page.

  2. リソース グループを選択して [リソース グループ] ページを開きます。

  3. ツール バーの [リソース グループの削除] を選択します。

  4. リソース グループの名前を入力して削除を確認し、 [削除] を選択します。

    画像に表示されている他のリソース グループは、Cloud Shell ウィンドウによって作成および使用されたものです。 後で Cloud Shell ウィンドウを使用しない場合はこれを削除してください。

次のステップ

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

さまざまなプログラミング言語を使用して Event Grid でイベントを発行および使用する方法については、次のサンプルを参照してください。