Ruby から Queue Storage を使用する方法

ヒント

Microsoft Azure ストレージ エクスプローラーを試す

Microsoft Azure ストレージ エクスプローラーは、Windows、macOS、Linux で Azure Storage のデータを視覚的に操作できる Microsoft 製の無料のスタンドアロン アプリです。

概要

このガイドでは、Microsoft Azure Queue Storage サービスを使用して一般的なシナリオを実行する方法について説明します。 サンプルは Ruby Azure API を使用して記述されています。 キュー メッセージの挿入ピーク取得削除と、キューの作成と削除の各シナリオについて説明します。

Queue storage とは

Azure キュー ストレージは、HTTP または HTTPS を使用した認証された呼び出しを介して世界中のどこからでもアクセスできる大量のメッセージを格納するためのサービスです。 キューの 1 つのメッセージの最大サイズは 64 KB で、1 つのキューには、ストレージ アカウントの合計容量の上限に達するまで、数百万のメッセージを格納できます。 Queue storage は、多くの場合、非同期的な処理用に作業のバックログを作成するために使用されます。

Queue サービスの概念

Azure Queue サービスには、次のコンポーネントが含まれます。

Azure Queue サービス コンポーネント

  • ストレージ アカウント: Azure のストレージにアクセスする場合には必ず、ストレージ アカウントを使用します。 ストレージ アカウントの詳細については、「ストレージ アカウントの概要」を参照してください。

  • キュー: キューは、メッセージのセットを格納します。 すべてのメッセージはキューに 格納されている必要があります。 キュー名は小文字で入力する必要があります。 キューの名前付け規則については、「 Naming Queues and Metadata (キューとメタデータの名前付け規則)」を参照してください。

  • メッセージ: 形式を問わず、メッセージのサイズは最大で 64 KB です。 メッセージをキューで保持できる最長時間は 7 日間です。 バージョン 2017-07-29 以降では、最大有効期間を任意の正の数にすることができます。また、-1 は、メッセージが期限切れにならないことを示します。 このパラメーターを省略すると、既定の有効期間は 7 日になります。

  • URL 形式: キューは次の URL 形式を使って処理できます: http://<storage account>.queue.core.windows.net/<queue>

    次の URL を使用すると、図のいずれかのキューをアドレス指定できます。

    http://myaccount.queue.core.windows.net/incoming-orders

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

最初の Azure ストレージ アカウントを作成する最も簡単な方法は、Azure Portal を利用することです。 詳細については、「 ストレージ アカウントの作成」を参照してください。

Azure Storage アカウントは、Azure PowerShellAzure CLI、または .NET 用 Azure ストレージ リソース プロバイダーを使用して作成することもできます。

現時点で Azure にストレージ アカウントを作成しない場合は、Azure ストレージ エミュレーターを使って、ローカル環境でコードの実行とテストを行うこともできます。 詳細については、ローカルでの Azure Storage の開発に Azurite エミュレーターを使用する方法に関するページを参照してください。

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

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

アプリケーションのストレージへのアクセスの構成

Azure Storage を使用するには、Ruby azure パッケージをダウンロードして使用する必要があります。このパッケージには、ストレージ REST サービスと通信するための便利なライブラリのセットが含まれています。

RubyGems を使用してパッケージを取得する

  1. PowerShell (Windows)、ターミナル (Mac)、Bash (Unix) などのコマンド ライン インターフェイスを使用します。
  2. コマンド ウィンドウに「gem install azure」と入力して、gem と依存関係をインストールします。

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

任意のテキスト エディターを使用して、ストレージを使用する Ruby ファイルの先頭に次のコードを追加します。

require "azure"

Azure Storage 接続文字列の設定

Azure モジュールは、Azure Storage アカウントに接続するために必要な情報として、環境変数 AZURE_STORAGE_ACCOUNTAZURE_STORAGE_ACCESS_KEY を読み取ります。 これらの環境変数が設定されていない場合は、Azure::QueueService を使用する前に、次のコードを使用してアカウント情報を指定する必要があります。

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

Azure ポータルでクラシックまたは Resource Manager ストレージ アカウントからこれらの値を取得するには:

  1. Azure Portal にログインします。
  2. 使用するストレージ アカウントを表示します。
  3. 右側の [設定] ブレードで、 [アクセス キー] をクリックします。
  4. 表示される [アクセス キー] ブレードに、アクセス キー 1 とアクセス キー 2 が表示されます。 このいずれかを使用できます。
  5. コピー アイコンをクリックしてキーをクリップボードにコピーします。

方法:キューを作成する

次のコードは、 Azure::QueueService オブジェクトを作成し、これによってキューを操作できるようにします。

azure_queue_service = Azure::QueueService.new

create_queue() メソッドを使用して、指定した名前のキューを作成します。

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

方法:メッセージをキューに挿入する

キューにメッセージを挿入するには、create_message() メソッドを使用し、新しいメッセージを作成してキューに追加します。

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

方法:次のメッセージをピークする

peek_messages() メソッドを呼び出すと、キューの先頭にあるメッセージをキューから削除せずにピークできます。 peek_messages() の既定では、1 つのメッセージを対象としてピークします。 ピークするメッセージ数を指定することもできます。

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

方法:次のメッセージをデキューする

キューからのメッセージの削除は、2 段階の手順で実行できます。

  1. list_messages() を呼び出すと、既定では、キュー内に次のメッセージが取得されます。 取得するメッセージ数を指定することもできます。 list_messages() から返されたメッセージは、このキューからメッセージを読み取る他のコードから参照できなくなります。 パラメーターとして、表示タイムアウトを秒単位で指定します。
  2. また、キューからのメッセージの削除を完了するには、delete_message() を呼び出す必要があります。

2 段階の手順でメッセージを削除するこの方法では、ハードウェアまたはソフトウェアの問題が原因でコードによるメッセージの処理が失敗した場合に、コードの別のインスタンスで同じメッセージを取得し、もう一度処理することができます。 ご自分のコードで、メッセージが処理された直後に delete_message() を呼び出します。

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

方法:キューに配置されたメッセージの内容を変更する

キュー内のメッセージの内容をインプレースで変更できます。 次のコードでは、update_message() メソッドを使用してメッセージを更新します。 このメソッドは、キュー メッセージの PopReceipt と、メッセージがキューに配置される日時を表す UTC DateTime 値を含むタプルを返します。

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)

方法: メッセージのデキュー用の追加オプション

キューからのメッセージの取得をカスタマイズする方法は 2 つあります。

  1. メッセージのバッチを取得できます。
  2. コードで各メッセージを完全に処理できるように、非表示タイムアウトの設定を長くまたは短くすることができます。

次のコード例では、list_messages() メソッドを使用して、1 回の呼び出しで 15 個のメッセージを取得します。 その後、各メッセージを出力して削除します。 また、各メッセージの非表示タイムアウトを 5 分に設定します。

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

方法:キューの長さを取得する

キュー内のメッセージの概数を取得できます。 get_queue_metadata() メソッドは、おおよそのメッセージ数とその他のキューのメタデータを返します。

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

方法:キューを削除する

キューおよびキューに格納されているすべてのメッセージを削除するには、キュー オブジェクトの delete_queue() メソッドを呼び出します。

azure_queue_service.delete_queue("test-queue")

次のステップ

これで、Queue Storage の基本を学習できました。さらに複雑なストレージ タスクを実行するには、次のリンク先を参照してください。

この記事で説明されている Azure Queue Storage と、「Service Bus キューの使用方法」で説明されている Azure Service Bus キューの比較については、「Storage キューと Service Bus キューの比較」をご覧ください