クイック スタート:Event Grid を使用して Azure Functions にカスタム イベントをルーティングする
Azure Event Grid は、クラウドのイベント処理サービスです。 Azure Functions は、サポートされているイベント ハンドラーの 1 つです。 この記事では、Azure portal を使用し、カスタム トピックを作成してそのトピックをサブスクライブし、イベントをトリガーして結果を表示します。 イベントを Azure Functions に送信します。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
Azure 関数アプリを作成する
Azure portal にサインインします。
左側のナビゲーション メニューで、[すべてのサービス] を選択します。
カテゴリのリストで [コンピューティング] を 選択します。
Function App の上にマウス ポインターを合わせて (選択しない)、選択+します。
Create Function App ウィザードの [基本] ページで、次の手順を実行します。
関数アプリを作成する [Azure サブスクリプション] を選択します。
新しいリソース グループを作成するか、既存のリソース グループを選択します。
関数アプリの名前を指定します。
[ランタイム スタック] で、[.NET] を選択します。
最も近いリージョンを選択します。
ページの下部にある [次へ: ストレージ] を選択します。
[ストレージ] ページで、新しいストレージ アカウントを作成するか、関数アプリに関連付ける既存のストレージ アカウントを選択し、ページの下部にある [確認と作成] を選択します。
[確認と作成] ページで、設定を確認し、ページの下部にある [作成] を選択し、関数アプリを作成ます。
デプロイが成功したら、[リソースに移動] を選択して、関数アプリのホーム ページに移動します。
関数を作成する
カスタム トピックをサブスクライブする前に、イベントを処理する関数を作成します。
[関数アプリ] ページで、右側のウィンドウの [Azure portal で作成] リンクを選択します。
[関数の作成] ページで、次の手順に従います。
HandleEventsFunc の [関数] ページで、左側のナビゲーション メニューで [コード + テスト] を選択し、コードを次のコードに置き換えて、コマンド バーの [保存] を選択します。
#r "Azure.Messaging.EventGrid" #r "System.Memory.Data" using Azure.Messaging.EventGrid; using System; public static void Run(EventGridEvent eventGridEvent, ILogger log) { log.LogInformation(eventGridEvent.Data.ToString()); }
左側のメニューで [モニター] を選択し、受信したイベント情報を表示できるように、ブラウザーのこのウィンドウまたはタブを開いたままにします。
カスタム トピックの作成
Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。
Web ブラウザー ウィンドウの新しいタブで、Azure portal にサインインします。
トピックの検索バーで、Event Grid トピックを検索し、[Event Grid トピック] を選択します。
[Event Grid トピック] ページで、コマンド バーの [+ 作成] を選択します。
[トピックの作成] ページで、次の手順に従います。
Azure サブスクリプションを選択します。
前の手順と同じリソース グループを選択します。
カスタム トピックの一意の名前を指定します。 トピック名は、DNS エントリによって表されるため、一意である必要があります。 画像に示されている名前は使用しないでください。 代わりに、必ず 3 - 50 文字以内で、a - z、A - Z、0 - 9、および "-" のみを含む独自の名前を作成します。
Event Grid トピックの場所を選択します。
[Review + create](レビュー + 作成) を選択します。
[確認および作成] ページで、設定を確認し、 [作成] を選択します。
カスタム トピックが作成されたら、[リソースに移動] リンクを選択して、作成したトピックに対して次の [Event Grid トピック] ページを表示します。
カスタム トピックのサブスクライブ
どのイベントを追跡し、どこにイベントを送信するかは、Event Grid トピックをサブスクライブすることによって Event Grid に伝えます。
次に、カスタム トピックの [Event Grid トピック] ページで、ツール バーの + [イベント サブスクリプション] を選択します。
[イベント サブスクリプションの作成] ページで、次の手順に従います。
イベント サブスクリプションの名前を入力します。
[エンドポイントのタイプ] に [Azure Function] を選択します。
[エンドポイントの構成] を選択 します。
関数エンドポイントに対し、関数アプリが存在する Azure サブスクリプションとリソース グループを選択して、先ほど作成した関数アプリと関数を選択します。 [選択の確認] を選択します。
この手順は省略可能ですが、運用環境のシナリオについては推奨されます。 [イベント サブスクリプションの作成] ページで、 [高度な機能] タブに切り替え、 [バッチごとの最大イベント数] および [優先バッチ サイズ (KB 単位)] の値を設定します。
バッチ処理を使用すると、高スループットが得られます。 [バッチごとの最大イベント数] には、サブスクリプションでバッチに含めるイベントの最大数を設定します。 優先バッチ サイズでは、バッチ サイズとして優先される上限をキロバイト単位で設定しますが、1 つのイベントがこのしきい値を超えると、その上限を超えてしまう可能性があります。
[イベント サブスクリプションの作成] ページで、 [作成] を選択します。
トピックへのイベントの送信
では、イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。 Azure CLI または PowerShell を使用して、テスト イベントをカスタム トピックに送信します。 通常はイベント データをアプリケーションまたは Azure サービスから送信することになります。
最初の例では、Azure CLI を使用しています。 この例では、カスタム トピックの URL とキー、およびサンプル イベント データを取得します。 <topic name>
には、実際のカスタム トピック名を使用してください。 これによりサンプルのイベント データが作成されます。 JSON の data
要素がイベントのペイロードです。 このフィールドには、適切な形式の JSON であればどのようなものでも格納することができます。 また、高度なルーティングやフィルタリングを行う場合には、subject フィールドを使用することもできます。 CURL は、HTTP 要求を送信するユーティリティです。
Azure CLI
Azure portal で、 [Cloud Shell] を選択します。 Cloud Shell ウィンドウの左上隅の [Bash] を選択します。
コマンドで使用される
topicname
とresourcegroupname
の変数を設定します。TOPICNAME
は実際の Event Grid トピックの名前で置き換えます。topicname="TOPICNAME"
RESOURCEGROUPNAME
は、Event Grid トピックを含む Azure リソース グループの名前に置き換えます。resourcegroupname="RESOURCEGROUPNAME"
次のコマンドを実行して、トピックのエンドポイントを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名とリソース グループ名を更新してください。
endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
次のコマンドを実行して、カスタム トピックのキーを取得します。コマンドをコピーして貼り付けた後、コマンドを実行する前にトピック名とリソース グループ名を更新してください。
key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
イベント定義を含む次のステートメントをコピーし、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"} ]'
次の Curl コマンドを実行して、イベントを送信します。
curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
Azure PowerShell
2 番目の例では、PowerShell を使用して、同様の手順を実行します。
Azure portal で [Cloud Shell] を選択します (または
https://shell.azure.com/
にアクセスします)。 Cloud Shell ウィンドウの左上隅の [PowerShell] を選択します。 「Azure CLI」セクションにあるサンプルの Cloud Shell ウィンドウの画像を参照してください。次の変数を設定します。 コマンドをコピーして貼り付けた後、トピック名とリソース グループ名を更新してから、次のコマンドを実行します。
$resourceGroupName = "RESOURCEGROUPNAME"
$topicName = "TOPICNAME"
次のコマンドを実行して、トピックのエンドポイントとキーを取得します。
$endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
イベントを準備します。 ステートメントをコピーし、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)+"]"
Invoke-WebRequest コマンドレットを使用して、イベントを送信します。
Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
関数がイベントを受信したことを確認する
以上でイベントがトリガーされ、そのメッセージが、Event Grid によってサブスクライブ時に構成したエンドポイントに送信されました。
Azure 関数の [監視] ページに、呼び出しが表示されます。
呼び出しを選択して詳細を表示します。
右側の ウィンドウの [ログ ] タブを使用して、トピックのエンドポイントにイベントを投稿するときにログに記録されたメッセージを表示することもできます。
リソースをクリーンアップする
引き続きこのイベントを使用する場合は、この記事で作成したリソースをクリーンアップしないでください。 それ以外の場合は、この記事で作成したリソースを削除してください。
左側のメニューの [リソース グループ] を選択します。 左側のメニューにこれが表示されていない場合は、左側のメニューの [すべてのサービス] を選択し、 [リソース グループ] を選択します。
リソース グループを選択して [リソース グループ] ページを開きます。
ツール バーの [リソース グループの削除] を選択します。
リソース グループの名前を入力して削除を確認し、 [削除] を選択します。
画像に表示されている他のリソース グループは、Cloud Shell ウィンドウによって作成および使用されたものです。 後で Cloud Shell ウィンドウを使用しない場合はこれを削除してください。
次のステップ
トピックを作成し、イベントをサブスクライブする方法がわかったら、Event Grid でできることについて、さらに情報を収集しましょう。
- Event Grid について
- Blob Storage のイベントをカスタム Web エンドポイントにルーティングする
- Azure Event Grid と Logic Apps で仮想マシンの変更を監視する
- ビッグ データをデータ ウェアハウスにストリーミングする
さまざまなプログラミング言語を使用して Event Grid でイベントを発行および使用する方法については、次のサンプルを参照してください。