クイック スタート: PowerShell を使用してストレージ イベントを Web エンドポイントにルーティングするQuickstart: Route storage events to web endpoint with PowerShell

Azure Event Grid は、クラウドのイベント処理サービスです。Azure Event Grid is an eventing service for the cloud. この記事では、Azure PowerShell を使用して Blob Storage のイベントをサブスクライブし、イベントをトリガーして結果を表示します。In this article, you use Azure PowerShell to subscribe to Blob storage events, trigger an event, and 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.

結果の表示

セットアップSetup

注意

この記事は、新しい 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 PowerShell の最新バージョンを実行している必要があります。This article requires that you're running the latest version of Azure PowerShell. インストールまたはアップグレードする必要がある場合は、Azure PowerShell モジュールのインストールと構成に関するページを参照してください。If you need to install or upgrade, see Install and configure Azure PowerShell.

Azure へのサインインSign in to Azure

Connect-AzAccount コマンドで Azure サブスクリプションにサインインし、画面上の指示に従って認証を行います。Sign in to your Azure subscription with the Connect-AzAccount command and follow the on-screen directions to authenticate.

Connect-AzAccount

この例では、westus2 を使って、全体で使用される 1 つの変数に選択肢を格納しています。This example uses westus2 and stores the selection in a variable for use throughout.

$location = "westus2"

リソース グループの作成Create a resource group

Event Grid のトピックは Azure リソースであり、Azure リソース グループに配置する必要があります。Event Grid topics are Azure resources, and must be placed in an Azure resource group. リソース グループは、Azure リソースをまとめてデプロイして管理するための論理上のコレクションです。The resource group is a logical collection into which Azure resources are deployed and managed.

New-AzResourceGroup コマンドでリソース グループを作成します。Create a resource group with the New-AzResourceGroup command.

次の例では、gridResourceGroup という名前のリソース グループを westus2 の場所に作成します。The following example creates a resource group named gridResourceGroup in the westus2 location.

$resourceGroup = "gridResourceGroup"
New-AzResourceGroup -Name $resourceGroup -Location $location

ストレージ アカウントの作成Create a storage account

Blob Storage のイベントは、汎用 v2 ストレージ アカウントおよび BLOB ストレージ アカウントで使用できます。Blob storage events are available in general-purpose v2 storage accounts and Blob storage accounts. 汎用 v2 ストレージ アカウントでは、BLOB、ファイル、キュー、テーブルをはじめとするすべてのストレージ サービスに対するすべての機能がサポートされます。General-purpose v2 storage accounts support all features for all storage services, including Blobs, Files, Queues, and Tables. BLOB ストレージ アカウントとは、Azure Storage に BLOB (オブジェクト) として非構造化データを格納するための特殊なストレージ アカウントです。A Blob storage account is a specialized storage account for storing your unstructured data as blobs (objects) in Azure Storage. Blob Storage アカウントは、汎用ストレージ アカウントと同様に、現在使われているすべての優れた耐久性、可用性、スケーラビリティ、およびパフォーマンス機能を共有します。たとえば、ブロック BLOB と追加 BLOB の 100% の API 整合性などです。Blob storage accounts are like general-purpose storage accounts and share all the great durability, availability, scalability, and performance features that you use today including 100% API consistency for block blobs and append blobs. 詳細については、「Azure ストレージ アカウントの概要」を参照してください。For more information, see Azure storage account overview.

New-AzStorageAccount を使って LRS レプリケーションで Blob Storage アカウントを作成し、使用するストレージ アカウントを定義するストレージ アカウント コンテキストを取得します。Create a Blob storage account with LRS replication using New-AzStorageAccount, then retrieve the storage account context that defines the storage account to be used. ストレージ アカウントで作業するとき、資格情報を繰り返し入力する代わりに、このコンテキストを参照します。When acting on a storage account, you reference the context instead of repeatedly providing the credentials. この例では、ローカル冗長ストレージ(LRS) を使って、gridstorage と呼ばれるストレージ アカウントを作成します。This example creates a storage account called gridstorage with locally redundant storage (LRS).

注意

このスクリプトで提供されている名前に数個のランダムな文字を追加する必要があるので、ストレージ アカウント名はグローバル名前空間にあります。Storage account names are in a global name space so you need to append some random characters to the name provided in this script.

$storageName = "gridstorage"
$storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup `
  -Name $storageName `
  -Location $location `
  -SkuName Standard_LRS `
  -Kind BlobStorage `
  -AccessTier Hot

$ctx = $storageAccount.Context

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

トピックをサブスクライブする前に、イベント メッセージ用のエンドポイントを作成しましょう。Before subscribing to the topic, let's create the 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.

<your-site-name> は、Web アプリの一意の名前に置き換えてください。Replace <your-site-name> with a unique name for your web app. Web アプリ名は、DNS エントリの一部であるため、一意である必要があります。The web app name must be unique because it's part of the DNS entry.

$sitename="<your-site-name>"

New-AzResourceGroupDeployment `
  -ResourceGroupName $resourceGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" `
  -siteName $sitename `
  -hostingPlanName viewerhost

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

現在表示されているメッセージがないサイトが表示されます。You should see the site with no messages currently displayed.

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. 次のコマンドを実行します。Run the following command:

Register-AzResourceProvider -ProviderNamespace Microsoft.EventGrid

登録完了まで少し時間がかかることがあります。It may take a moment for the registration to finish. 状態をチェックするには、次を実行します。To check the status, run:

Get-AzResourceProvider -ProviderNamespace Microsoft.EventGrid

RegistrationStatusRegistered になったら、次に進めることができます。When RegistrationStatus is Registered, you're ready to continue.

ストレージ アカウントをサブスクライブするSubscribe to your storage account

どのイベントを追跡するかは、トピックをサブスクライブすることによって Event Grid に伝えます。次の例では、作成したストレージ アカウントをサブスクライブし、Web アプリからの URL をイベント通知のエンドポイントとして渡します。You subscribe to a topic to tell Event Grid which events you want to track. The following example subscribes to the storage account you created, and passes the URL from your web app as the endpoint for event notification. Web アプリのエンドポイントには、サフィックス /api/updates/ が含まれている必要があります。The endpoint for your web app must include the suffix /api/updates/.

$storageId = (Get-AzStorageAccount -ResourceGroupName $resourceGroup -AccountName $storageName).Id
$endpoint="https://$sitename.azurewebsites.net/api/updates"

New-AzEventGridSubscription `
  -EventSubscriptionName gridBlobQuickStart `
  -Endpoint $endpoint `
  -ResourceId $storageId

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.

サブスクリプション イベントの表示

Blob Storage からのイベントのトリガーTrigger an event from Blob storage

では、イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。Now, let's trigger an event to see how Event Grid distributes the message to your endpoint. 最初に、コンテナーとオブジェクトを作成しましょう。First, let's create a container and an object. 次に、コンテナーにオブジェクトをアップロードしましょう。Then, let's upload the object into the container.

$containerName = "gridcontainer"
New-AzStorageContainer -Name $containerName -Context $ctx

echo $null >> gridTestFile.txt

Set-AzStorageBlobContent -File gridTestFile.txt -Container $containerName -Context $ctx -Blob gridTestFile.txt

以上でイベントがトリガーされ、そのメッセージが、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.

[{
  "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myrg/providers/Microsoft.Storage/storageAccounts/myblobstorageaccount",
  "subject": "/blobServices/default/containers/gridcontainer/blobs/gridTestFile.txt",
  "eventType": "Microsoft.Storage.BlobCreated",
  "eventTime": "2017-08-16T20:33:51.0595757Z",
  "id": "4d96b1d4-0001-00b3-58ce-16568c064fab",
  "data": {
    "api": "PutBlockList",
    "clientRequestId": "Azure-Storage-PowerShell-d65ca2e2-a168-4155-b7a4-2c925c18902f",
    "requestId": "4d96b1d4-0001-00b3-58ce-16568c000000",
    "eTag": "0x8D4E4E61AE038AD",
    "contentType": "application/octet-stream",
    "contentLength": 0,
    "blobType": "BlockBlob",
    "url": "https://myblobstorageaccount.blob.core.windows.net/gridcontainer/gridTestFile.txt",
    "sequencer": "00000000000000EB0000000000046199",
    "storageDiagnostics": {
      "batchId": "dffea416-b46e-4613-ac19-0371c0c5e352"
    }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

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

このストレージ アカウントとイベント サブスクリプションを使用して作業を続ける場合は、この記事で作成したリソースをクリーンアップしないでください。If you plan to continue working with this storage account and event subscription, don't clean up the resources created in this article. 引き続き使用する予定がない場合は、次のコマンドを使用して、この記事で作成したリソースを削除します。If you don't plan to continue, use the following command to delete the resources you created in this article.

Remove-AzResourceGroup -Name $resourceGroup

次の手順Next steps

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