Ruby から Queue ストレージを使用する方法How to use Queue storage from Ruby

ヒント

Microsoft Azure ストレージ エクスプローラーを試すTry the Microsoft Azure Storage Explorer

Microsoft Azure ストレージ エクスプローラーは、Windows、macOS、Linux で Azure Storage のデータを視覚的に操作できる Microsoft 製の無料のスタンドアロン アプリです。Microsoft Azure Storage Explorer is a free, standalone app from Microsoft that enables you to work visually with Azure Storage data on Windows, macOS, and Linux.

概要Overview

このガイドでは、Microsoft Azure Queue ストレージ サービスを使用して一般的なシナリオを実行する方法について説明します。This guide shows you how to perform common scenarios using the Microsoft Azure Queue Storage service. サンプルは Ruby Azure API を使用して記述されています。The samples are written using the Ruby Azure API. キュー メッセージの挿入ピーク取得削除と、キューの作成と削除の各シナリオについて説明します。The scenarios covered include inserting, peeking, getting, and deleting queue messages, as well as creating and deleting queues.

キュー ストレージとはWhat is Queue Storage?

Azure キュー ストレージは、HTTP または HTTPS を使用した認証された呼び出しを介して世界中のどこからでもアクセスできる大量のメッセージを格納するためのサービスです。Azure Queue storage is a service for storing large numbers of messages that can be accessed from anywhere in the world via authenticated calls using HTTP or HTTPS. キューの 1 つのメッセージの最大サイズは 64 KB で、1 つのキューには、ストレージ アカウントの合計容量の上限に達するまで、数百万のメッセージを格納できます。A single queue message can be up to 64 KB in size, and a queue can contain millions of messages, up to the total capacity limit of a storage account.

キュー ストレージの一般的な用途には、次のようなものがあります。Common uses of Queue storage include:

  • 非同期に処理する作業のバックログを作成するCreating a backlog of work to process asynchronously
  • Azure Web ロールから worker ロールにメッセージを渡すPassing messages from an Azure web role to an Azure worker role

キュー サービスの概念Queue Service Concepts

キュー サービスには、次のコンポーネントが含まれます。The Queue service contains the following components:

Queue1

  • URL 形式: キューは、次の URL 形式を使用してアドレス指定できます。URL format: Queues are addressable using the following URL format:
    http://<storage account>.queue.core.windows.net/<queue>http://<storage account>.queue.core.windows.net/<queue>

    次の URL を使用すると、図のいずれかのキューをアドレス指定できます。The following URL addresses a queue in the diagram:

    http://myaccount.queue.core.windows.net/images-to-download

  • ストレージ アカウント: Azure のストレージにアクセスする場合には必ず、ストレージ アカウントを使用します。Storage Account: All access to Azure Storage is done through a storage account. ストレージ アカウントの容量の詳細については、 Azure Storage の拡張性とパフォーマンスのターゲットに関するページ を参照してください。See Azure Storage Scalability and Performance Targets for details about storage account capacity.

  • キュー: キューは、メッセージのセットを格納します。Queue: A queue contains a set of messages. すべてのメッセージはキューに 格納されている必要があります。All messages must be in a queue. キュー名は小文字で入力する必要があります。Note that the queue name must be all lowercase. キューの名前付け規則については、「 Naming Queues and Metadata (キューとメタデータの名前付け規則)」を参照してください。For information on naming queues, see Naming Queues and Metadata.

  • メッセージ: 形式を問わず、メッセージのサイズは最大で 64 KB です。Message: A message, in any format, of up to 64 KB. メッセージをキューで保持できる最長時間は 7 日間です。The maximum time that a message can remain in the queue is 7 days.

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

最初の Azure ストレージ アカウントを作成する最も簡単な方法は、Azure Portal を利用することです。The easiest way to create your first Azure storage account is by using the Azure portal. 詳細については、「 ストレージ アカウントの作成」を参照してください。To learn more, see Create a storage account.

Azure Storage アカウントは、Azure PowerShellAzure CLI、または .NET 用 Azure ストレージ リソース プロバイダーを使用して作成することもできます。You can also create an Azure storage account by using Azure PowerShell, Azure CLI, or the Azure Storage Resource Provider for .NET.

現時点で Azure にストレージ アカウントを作成しない場合は、Azure ストレージ エミュレーターを使って、ローカル環境でコードの実行とテストを行うこともできます。If you prefer not to create a storage account in Azure at this time, you can also use the Azure storage emulator to run and test your code in a local environment. 詳細については、「 開発とテストのための Azure のストレージ エミュレーター使用」を参照してください。For more information, see Use the Azure Storage Emulator for Development and Testing.

Ruby アプリケーションの作成Create a Ruby Application

Ruby アプリケーションを作成します。Create a Ruby application. 手順については、「App Service on Linux での Ruby アプリの作成」を参照してください。For instructions, see Create a Ruby App in App Service on Linux.

アプリケーションのストレージへのアクセスの構成Configure Your Application to Access Storage

Azure ストレージを使用するには、Ruby azure パッケージをダウンロードして使用する必要があります。このパッケージには、ストレージ REST サービスと通信するための便利なライブラリのセットが含まれています。To use Azure storage, you need to download and use the Ruby azure package, which includes a set of convenience libraries that communicate with the storage REST services.

RubyGems を使用してパッケージを取得するUse RubyGems to obtain the package

  1. PowerShell (Windows)、ターミナル (Mac)、Bash (Unix) などのコマンド ライン インターフェイスを使用します。Use a command-line interface such as PowerShell (Windows), Terminal (Mac), or Bash (Unix).
  2. コマンド ウィンドウに「gem install azure」と入力して、gem と依存関係をインストールします。Type "gem install azure" in the command window to install the gem and dependencies.

パッケージをインポートするImport the package

任意のテキスト エディターを使用して、ストレージを使用する Ruby ファイルの先頭に次のコードを追加します。Use your favorite text editor, add the following to the top of the Ruby file where you intend to use storage:

require "azure"

Azure のストレージ接続文字列の設定Setup an Azure Storage Connection

azure モジュールは、Azure のストレージ アカウントに接続するために必要な情報として、環境変数 AZURE_STORAGE_ACCOUNTAZURE_STORAGE_ACCESS_KEY を読み取ります。The azure module will read the environment variables AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY for information required to connect to your Azure storage account. これらの環境変数が設定されていない場合は、 Azure::QueueService を使用する前に、次のコードを使用してアカウント情報を指定する必要があります。If these environment variables are not set, you must specify the account information before using Azure::QueueService with the following code:

Azure.config.storage_account_name = "<your azure storage account>"
Azure.config.storage_access_key = "<your Azure storage access key>"

Azure ポータルでクラシックまたは Resource Manager ストレージ アカウントからこれらの値を取得するには:To obtain these values from a classic or Resource Manager storage account in the Azure portal:

  1. Azure Portal にログインします。Log in to the Azure portal.
  2. 使用するストレージ アカウントを表示します。Navigate to the storage account you want to use.
  3. 右側の [設定] ブレードで、 [アクセス キー] をクリックします。In the Settings blade on the right, click Access Keys.
  4. 表示される [アクセス キー] ブレードに、アクセス キー 1 とアクセス キー 2 が表示されます。In the Access keys blade that appears, you'll see the access key 1 and access key 2. このいずれかを使用できます。You can use either of these.
  5. コピー アイコンをクリックしてキーをクリップボードにコピーします。Click the copy icon to copy the key to the clipboard.

方法:キューを作成するHow To: Create a Queue

次のコードは、 Azure::QueueService オブジェクトを作成し、これによってキューを操作できるようにします。The following code creates a Azure::QueueService object, which enables you to work with queues.

azure_queue_service = Azure::QueueService.new

create_queue() メソッドを使用して、指定した名前のキューを作成します。Use the create_queue() method to create a queue with the specified name.

begin
  azure_queue_service.create_queue("test-queue")
rescue
  puts $!
end

方法:メッセージをキューに挿入するHow To: Insert a Message into a Queue

キューにメッセージを挿入するには、create_message() メソッドを使用し、新しいメッセージを作成してキューに追加します。To insert a message into a queue, use the create_message() method to create a new message and add it to the queue.

azure_queue_service.create_message("test-queue", "test message")

方法:次のメッセージをピークするHow To: Peek at the Next Message

peek_messages() メソッドを呼び出すと、キューの先頭にあるメッセージをキューから削除せずにピークできます。You can peek at the message in the front of a queue without removing it from the queue by calling the peek_messages() method. 既定では、peek_messages() は 1 つのメッセージを対象としてピークします。By default, peek_messages() peeks at a single message. ピークするメッセージ数を指定することもできます。You can also specify how many messages you want to peek.

result = azure_queue_service.peek_messages("test-queue",
  {:number_of_messages => 10})

方法:次のメッセージをデキューするHow To: Dequeue the Next Message

キューからのメッセージの削除は、2 段階の手順で実行できます。You can remove a message from a queue in two steps.

  1. list_messages() を呼び出すと、既定では、キュー内の次のメッセージを取得します。When you call list_messages(), you get the next message in a queue by default. 取得するメッセージ数を指定することもできます。You can also specify how many messages you want to get. list_messages() から返されたメッセージは、このキューからメッセージを読み取る他のコードから参照できなくなります。The messages returned from list_messages() becomes invisible to any other code reading messages from this queue. パラメーターとして、表示タイムアウトを秒単位で指定します。You pass in the visibility timeout in seconds as a parameter.
  2. また、キューからのメッセージの削除を完了するには、delete_message() を呼び出す必要があります。To finish removing the message from the queue, you must also call delete_message().

2 段階の手順でメッセージを削除するこの方法では、ハードウェアまたはソフトウェアの問題が原因でコードによるメッセージの処理が失敗した場合に、コードの別のインスタンスで同じメッセージを取得し、もう一度処理することができます。This two-step process of removing a message assures that when your code fails to process a message due to hardware or software failure, another instance of your code can get the same message and try again. コードでは、メッセージが処理された直後に delete_message() を呼び出します。Your code calls delete_message() right after the message has been processed.

messages = azure_queue_service.list_messages("test-queue", 30)
azure_queue_service.delete_message("test-queue", 
  messages[0].id, messages[0].pop_receipt)

方法:キューに配置されたメッセージの内容を変更するHow To: Change the Contents of a Queued Message

キュー内のメッセージの内容をインプレースで変更できます。You can change the contents of a message in-place in the queue. 次のコードでは、update_message() メソッドを使用してメッセージを更新します。The code below uses the update_message() method to update a message. このメソッドは、キュー メッセージの PopReceipt と、メッセージがキューに配置される日時を表す UTC 日付/時刻値を含むタプルを返します。The method will return a tuple which contains the pop receipt of the queue message and a UTC date time value that represents when the message will be visible on the queue.

message = azure_queue_service.list_messages("test-queue", 30)
pop_receipt, time_next_visible = azure_queue_service.update_message(
  "test-queue", message.id, message.pop_receipt, "updated test message", 
  30)

方法:メッセージのデキュー用の追加オプションHow To: Additional Options for Dequeuing Messages

キューからのメッセージの取得をカスタマイズする方法は 2 つあります。There are two ways you can customize message retrieval from a queue.

  1. メッセージのバッチを取得できます。You can get a batch of message.
  2. コードで各メッセージを完全に処理できるように、非表示タイムアウトの設定を長くまたは短くすることができます。You can set a longer or shorter invisibility timeout, allowing your code more or less time to fully process each message.

次のコード例では、list_messages() メソッドを使用して、1 回の呼び出しで 15 個のメッセージを取得します。The following code example uses the list_messages() method to get 15 messages in one call. その後、各メッセージを出力して削除します。Then it prints and deletes each message. また、各メッセージの非表示タイムアウトを 5 分に設定します。It also sets the invisibility timeout to five minutes for each message.

azure_queue_service.list_messages("test-queue", 300
  {:number_of_messages => 15}).each do |m|
  puts m.message_text
  azure_queue_service.delete_message("test-queue", m.id, m.pop_receipt)
end

方法:キューの長さを取得するHow To: Get the Queue Length

キュー内のメッセージの概数を取得できます。You can get an estimation of the number of messages in the queue. get_queue_metadata() メソッドを使用して、おおよそのメッセージ数とキューのメタデータを返すように Queue サービスに要求します。The get_queue_metadata() method asks the queue service to return the approximate message count and metadata about the queue.

message_count, metadata = azure_queue_service.get_queue_metadata(
  "test-queue")

方法:キューを削除するHow To: Delete a Queue

キューと、キューに含まれているすべてのメッセージを削除するには、キュー オブジェクトに対して delete_queue() メソッドを呼び出します。To delete a queue and all the messages contained in it, call the delete_queue() method on the queue object.

azure_queue_service.delete_queue("test-queue")

次の手順Next Steps

これで、Queue ストレージの基本を学習できました。さらに複雑なストレージ タスクを実行するには、次のリンク先を参照してください。Now that you've learned the basics of queue storage, follow these links to learn about more complex storage tasks.

この記事で説明されている Azure Queue サービスと、「Service Bus キューの使用方法」で説明されている Azure Service Bus キューの比較については、「Azure キューと Service Bus キューの比較」をご覧ください。For a comparison between the Azure Queue Service discussed in this article and Azure Service Bus Queues discussed in the How to use Service Bus Queues article, see Azure Queues and Service Bus Queues - Compared and Contrasted