クイック スタート: Azure CLI を使用してカスタム イベントを Event Grid 経由で Azure Queue Storage にルーティングする

Azure Event Grid は、非常にスケーラブルなサーバーレスのイベント ブローカーであり、イベントを使ってアプリケーションを統合するために使用できます。 Event Grid はイベントをサポートされているイベント ハンドラーに配信します。Azure Queue ストレージはその 1 つです。 この記事では、Azure CLI を使って次の手順のようにします。

  1. Event Grid のカスタム トピックを作成します。
  2. カスタム トピック用の Azure Queue サブスクリプションを作成します。
  3. サンプル イベントをカスタム トピックに送信します。
  4. それらのイベントが Azure Queue Storage に配信されることを確認します。

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

リソース グループを作成する

Event Grid のトピックは Azure リソースであり、Azure リソース グループに配置する必要があります。 リソース グループは、Azure リソースをまとめてデプロイして管理するための論理上のコレクションです。

az group create コマンドを使用して、リソース グループを作成します。 次の例では、gridResourceGroup という名前のリソース グループを westus2 の場所に作成します。

注意

CLI の例の横にある [使ってみる] を選び、右側のペインで Cloud Shell を起動します。 [コピー] ボタンを選んでコマンドをコピーし、Cloud Shell ウィンドウに貼り付けてから、Enter キーを押してコマンドを実行します。

az group create --name gridResourceGroup --location westus2

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

  1. Azure サブスクリプションで Event Grid を使用したことがない場合は、Event Grid リソース プロバイダーを登録する必要がある可能性があります。 以下のプロバイダーを登録するコマンドを実行します。

    az provider register --namespace Microsoft.EventGrid
    
  2. 登録完了まで少し時間がかかることがあります。 状態を確認するには、次のコマンドを実行します。

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

    registrationStateRegistered になったら、次に進めることができます。

カスタム トピックの作成

Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。 次の例では、リソース グループにカスタム トピックを作成します。 <topic_name> は、カスタム トピックの一意の名前に置き換えてください。 Event Grid トピック名は、ドメイン ネーム システム (DNS) エントリによって表されるため、一意である必要があります。

  1. トピックの名前を指定します。

    topicname="<TOPIC NAME>"
    
  2. 次のコマンドを実行して、トピックを作成します。

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

キュー ストレージを作成する

カスタム トピックをサブスクライブする前に、イベント メッセージ用のエンドポイントを作成しましょう。 イベントを収集するためのキュー ストレージを作成します。

  1. Azure ストレージ アカウントの一意の名前を指定します。

    storagename="<STORAGE ACCOUNT NAME>"    
    
  2. 次のコマンドを実行して、ストレージに Azure ストレージ アカウントとキュー (eventqueue という名前) を作成します。

    queuename="eventqueue"
    
    az storage account create -n $storagename -g gridResourceGroup -l westus2 --sku Standard_LRS
    key="$(az storage account keys list -n $storagename --query "[0].{value:value}" --output tsv)"    
    az storage queue create --name $queuename --account-name $storagename --account-key $key
    

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

次の例では、作成したカスタム トピックをサブスクライブし、エンドポイントのキュー ストレージのリソース ID を渡します。 Azure CLI では、エンドポイントとしてキュー ストレージの ID を渡します。 エンドポイントの形式は次のとおりです。

/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP NAME>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/queueservices/default/queues/<QUEUE NAME>

次のスクリプトは、キューのストレージ アカウントのリソース ID を取得します。 キュー ストレージの ID を作成して、Event Grid トピックをサブスクライブします。 エンドポイントの種類を storagequeue に設定し、エンドポイントのキュー ID を使います。

重要

有効期限のプレースホルダー (<yyyy-mm-dd>) を実際の値に置き換えます。 たとえば、コマンドを実行する前の 2022-11-17

storageid=$(az storage account show --name $storagename --resource-group gridResourceGroup --query id --output tsv)
queueid="$storageid/queueservices/default/queues/$queuename"
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name mystoragequeuesubscription \
  --endpoint-type storagequeue \
  --endpoint $queueid \
  --expiration-date "<yyyy-mm-dd>"

イベント サブスクリプションを作成するアカウントは、キュー ストレージへの書き込みアクセス権を持っている必要があります。 サブスクリプションに有効期限の日付が設定されていることに注意してください。

サブスクリプションの作成に REST API を使用する場合には、ストレージ アカウントの ID とキューの名前をそれぞれ別個のパラメーターとして渡します。

"destination": {
  "endpointType": "storagequeue",
  "properties": {
    "queueName":"eventqueue",
    "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>"
  }
  ...

カスタム トピックへのイベントの送信

イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。 まず、カスタム トピックの URL とキーを取得します。

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)

この記事では、単純化するために、サンプル イベント データをカスタム トピックに送信します。 通常はイベント データをアプリケーションまたは Azure サービスから送信することになります。 CURL は、HTTP 要求を送信するユーティリティです。 この記事では、CURL を使って、イベントをカスタム トピックに送信します。 次の例では、3 つのイベントを Event Grid トピックに送信します。

for i in 1 2 3
do
   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 -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
done

ポータルでキュー ストレージに移動し、イベント グリッドがキューにこれら 3 つのイベントを送信したことを確認します。

Screenshot showing the list of messages in the queue that are received from Event Grid.

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

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

az group delete --name gridResourceGroup

次のステップ

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

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