次の方法で共有


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. コマンド バーの [登録] を選択します。

    Microsoft.EventGrid プロバイダーを Azure サブスクリプションに登録するイメージ。

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

    Microsoft.EventGrid プロバイダーを Azure サブスクリプションに正常に登録されたことを示すイメージ。

カスタム トピックの作成

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

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

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

    Event Grid トピックを検索する Azure ポート検索バーを示すスクリーンショット。

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

    [Event Grid トピック] ページの [トピックの作成] ボタンを示すスクリーンショット。

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

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

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

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

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

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

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

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

      設定を確認して作成する

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

    [イベント グリッド トピック] ホーム ページを示すスクリーンショット。

    注意

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

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

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

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

    Resource Manager テンプレートを Azure にデプロイするボタン。

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

    1. [リソース グループ] で、既存のリソース グループを選ぶか、リソース グループを作成します。

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

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

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

      [カスタム デプロイ] ページのスクリーンショット。

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

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

    デプロイに成功したメッセージと、リソース グループに移動するためのリンクを示すスクリーンショット。

  5. [リソース グループ] ページのリソースの一覧で、作成した Web アプリ (次の例では contosoegriviewer) を選択します。

    デプロイされたリソースを含む [リソース グループ] ページを示すスクリーンショット。

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

    サイトへのリンクが強調表示されている App Service ページを示すスクリーンショット。

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

    Event Grid ビューアー サンプル アプリを示すスクリーンショット。

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

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

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

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

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

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

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

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

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

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

      エンドポイントの URL を指定する

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

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

    サブスクリプション検証済みイベントを含む Event Grid ビューアー アプリのスクリーンショット。

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

では、イベントをトリガーして、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 ブラウザーの下部ペインに表示されます。

    Cloud Shell アイコンを選択する

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

    左上隅に Bash が選択されている Cloud Shell を示すスクリーンショット。

  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 ブラウザーの下部ペインに表示されます。

    Cloud Shell アイコンを選択する

  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 ビューアー

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

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

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

    [リソース グループ] ページを示すスクリーンショット。

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

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

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

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

次のステップ

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

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