PowerShell から Azure Queue Storage を使用する方法

Azure Queue Storage は、HTTP または HTTPS を介して世界中のどこからでもアクセスできる大量のメッセージを格納するためのサービスです。 詳細については、Azure Queue Storage の概要に関するページをご覧ください。 このハウツー記事では、Queue Storage の一般的な操作について取り上げます。 以下の方法について説明します。

  • キューを作成する
  • キューを取得する
  • メッセージを追加する
  • メッセージを読む
  • メッセージを削除する
  • キューを削除する

このハウツー ガイドには、Azure PowerShell (Az) モジュール v0.7 以降が必要です。 現在インストールされているバージョンを確認するには、Get-Module -ListAvailable Az を実行します。 アップグレードする必要がある場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。

キューのデータ プレーン用の PowerShell コマンドレットはありません。 メッセージの追加、読み取り、削除などのデータ プレーン操作を実行するには、PowerShell で公開されるとおりに、.NET ストレージ クライアント ライブラリを使用する必要があります。 メッセージ オブジェクトを作成し、AddMessage などのコマンドを使用して、そのメッセージに対して操作を実行できます。 この記事では、その方法について説明します。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Azure へのサインイン

Connect-AzAccount コマンドを使用して Azure サブスクリプションにサインインし、画面上の指示に従います。

Connect-AzAccount

場所の一覧を取得する

使用する場所がわからない場合、利用できる場所を一覧表示できます。 一覧が表示されたら、使用する場所を見つけます。 この演習では eastus を使用します。 将来使用するために、これを変数 location に保存します。

Get-AzLocation | Select-Object Location
$location = "eastus"

リソース グループの作成

New-AzResourceGroup コマンドでリソース グループを作成します。

Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 将来使用するために、リソース グループ名を変数に保存します。 この例では、howtoqueuesrg という名前のリソース グループが eastus リージョンに作成されます。

$resourceGroup = "howtoqueuesrg"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location

ストレージ アカウントの作成

New-AzStorageAccount を使用して、ローカル冗長ストレージ (LRS) で標準の汎用ストレージ アカウントを作成します。 使用されるストレージ アカウントを定義するストレージ アカウント コンテキストを取得します。 ストレージ アカウントで作業するとき、資格情報を繰り返し入力する代わりに、このコンテキストを参照します。

$storageAccountName = "howtoqueuestorage"
$storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup `
  -Name $storageAccountName `
  -Location $location `
  -SkuName Standard_LRS

$ctx = $storageAccount.Context

キューを作成する

次の例では、まず、ストレージ アカウント コンテキストを使用して Azure Storage への接続を確立します。このコンテキストには、ストレージ アカウント名とそのアクセス キーが含まれます。 次に、New-AzStorageQueue コマンドレットを呼び出して、howtoqueue という名前のキューを作成します。

$queueName = "howtoqueue"
$queue = New-AzStorageQueue -Name $queueName -Context $ctx

Azure Queue Storage での名前付け規則の詳細については、「キューおよびメタデータの名前付け」を参照してください。

キューを取得する

あるストレージ アカウント内の特定のキューまたはすべてのキューの一覧を照会して取得できます。 次の例では、ストレージ アカウントの全部のキューと特定のキューを取得する方法を示しています。いずれのコマンドでも Get-AzStorageQueue コマンドレットが使用されます。

# Retrieve a specific queue
$queue = Get-AzStorageQueue -Name $queueName -Context $ctx
# Show the properties of the queue
$queue

# Retrieve all queues and show their names
Get-AzStorageQueue -Context $ctx | Select-Object Name

メッセージをキューに追加する

キュー内の実際のメッセージに影響を与える操作では、PowerShell で公開されるとおりに、.NET ストレージ クライアント ライブラリを使用します。 メッセージをキューに追加するには、メッセージ オブジェクトの新しいインスタンスを作成します。Microsoft.Azure.Storage.Queue.CloudQueueMessage クラスです。 次に、AddMessage メソッドを呼び出します。 CloudQueueMessage は、文字列 (UTF-8 形式) またはバイト配列で作成できます。

次の例は、メッセージをキューに追加する方法を示しています。

# Create a new message using a constructor of the CloudQueueMessage class
$queueMessage = [Microsoft.Azure.Storage.Queue.CloudQueueMessage]::new("This is message 1")

# Add a new message to the queue
$queue.CloudQueue.AddMessageAsync($queueMessage)

# Add two more messages to the queue
$queueMessage = [Microsoft.Azure.Storage.Queue.CloudQueueMessage]::new("This is message 2")
$queue.CloudQueue.AddMessageAsync($queueMessage)

$queueMessage = [Microsoft.Azure.Storage.Queue.CloudQueueMessage]::new("This is message 3")
$queue.CloudQueue.AddMessageAsync($queueMessage)

Azure Storage Explorer を使用する場合、Azure アカウントに接続し、ストレージ アカウントのキューを表示し、キューにドリルダウンし、そのキューに関するメッセージを表示できます。

キューのメッセージを読み、その後、削除する

メッセージは、先入れ先出しをできるだけ試すという方式で読まれます。 最初に届いたメッセージが最初に読まれるという保証はありません。 キューのメッセージを読むと、そのキューを見ているその他すべてのプロセスでそのメッセージが見えなくなります。 この措置によって、ハードウェアまたはソフトウェアの問題が原因でコードによるメッセージの処理が失敗した場合でも、コードの別のインスタンスで同じメッセージを取得し、もう一度処理できます。

この非表示タイムアウトによって、メッセージが見えなくなる時間が定義されます。この時間を過ぎると、再び表示され、処理できます。 既定値は 30 秒です。

コードは 2 つの手順でキューのメッセージを読みます。 Microsoft.Azure.Storage.Queue.CloudQueue.GetMessage メソッドを呼び出すと、キュー内の次のメッセージを取得します。 GetMessage から返されたメッセージは、このキューからメッセージを読み取る他のコードから参照できなくなります。 キューからのメッセージの削除を完了するには、Microsoft.Azure.Storage.Queue.CloudQueue.DeleteMessage を呼び出します。

次の例では、3 つのキュー メッセージを読み、それから 10 秒 (非表示タイムアウト) 待ちます。 その後、3 つのメッセージを再び読み、読んだら DeleteMessage を呼び出し、メッセージを削除します。 メッセージの削除後にキューを読もうとすると、$queueMessage$null として返されます。

# Set the amount of time you want to entry to be invisible after read from the queue
# If it is not deleted by the end of this time, it will show up in the queue again
$invisibleTimeout = [System.TimeSpan]::FromSeconds(10)

# Read the message from the queue, then show the contents of the message. Read the other two messages, too.
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result

# After 10 seconds, these messages reappear on the queue.
# Read them again, but delete each one after reading it.
# Delete the message.
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queue.CloudQueue.DeleteMessageAsync($queueMessage.Result.Id,$queueMessage.Result.popReceipt)
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queue.CloudQueue.DeleteMessageAsync($queueMessage.Result.Id,$queueMessage.Result.popReceipt)
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queue.CloudQueue.DeleteMessageAsync($queueMessage.Result.Id,$queueMessage.Result.popReceipt)

キューを削除する

キューおよびキューに含まれているすべてのメッセージを削除するには、Remove-AzStorageQueue コマンドレットを呼び出します。 次の例は、Remove-AzStorageQueue コマンドレットを使用し、この演習で使用したキューを削除する方法を示しています。

# Delete the queue
Remove-AzStorageQueue -Name $queueName -Context $ctx

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

この演習で作成したすべてのアセットを削除するには、リソース グループを削除します。 これにより、そのグループ内に含まれているすべてのリソースも削除されます。 この場合、作成されたストレージ アカウントとリソース グループ自体が削除されます。

Remove-AzResourceGroup -Name $resourceGroup

次の手順

このハウツー記事では、次のような、PowerShell による基本的な Queue Storage 管理について説明しました。

  • キューを作成する
  • キューを取得する
  • メッセージを追加する
  • 次のメッセージを読む
  • メッセージを削除する
  • キューを削除する

Microsoft Azure PowerShell Storage コマンドレット

Microsoft Azure Storage Explorer