AWS SQS(1)Amazon Simple Queue Serviceの概要

Amazon SQSについて

Amazon SQSは、マネージド型のメッセージキューイングサービス。SQSを使用することであらゆる量のソフトウェアコンポーネント間で、メッセージの送信や保存、受信が可能となる。

SQSでは、標準キューと呼ばれる配信順序がベストエフォート型のキューと、FIFOキューと呼ばれる送信順に配信されるキューの2つが用意されている。FIFOキューは、米国東部(バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、および 欧州 (アイルランド) リージョンのみで使用可能。

内容 標準キュー FIFOキュー
イメージ 標準キュー FIFOキュー
特徴 無限のスループット, 1回以上の配信, ベストエフォート 300件/秒, 1回のみ処理, 厳密な順序

キュー内のメッセージ数の上限は、12万件。メッセージ属性は、単一メッセージ内に10個まで。バッチ処理は、10メッセージまで同時に可能である。

AWSサービスとの連携

Amazon SQSは、他のAWSサービスと連携して使用することができる。

  • Amazon SNSでトピックが発行された際に、指定したSQS(標準キューのみ)対してキューメッセージを送信することができる。
  • キュー(標準キューのみ)にメッセージが着信した際に、これをトリガにLambda関数を事項させることができる。

キューの設定

キューを作成する際には、以下の項目を設定する。

設定項目 内容 デフォルト値 最大
可視性タイムアウト 受信したメッセージが他のキューから見えない時間 30秒 12時間
保持期間 メッセージの保持期間 4日 14日
最大メッセージサイズ 最大メッセージサイズ 256KB 256KB
配信遅延 初回配信時の遅延時間 0秒 15分
メッセージ受信待機時間 ロングポーリング時の待機時間。0秒に設定するとショートポーリングとなる。 0秒 20秒
コンテンツに基づく重複排除 (FIFOのみ) 本文のハッシュ値から重複排除IDを自動生成する 無効
デッドレターキュー 最大受信数を超えた場合の処理 無効 1000
サーバ側暗号化 CMKを用いたサーバ側暗号化の設定 無効

ロングポーリングとショートポーリング

ロングポーリングの場合、問い合わせの結果が空であった場合に、指定したメッセージ受信待機時間、SQSが待機してから応答を返す。これによって、空のレスポンス数を削減し、効率的なメッセージ取得が可能となる。

ショートポーリング

ショートポーリングは、問い合わせの結果に関わらず、常に応答を返す。

メッセージの送信

SQSのメッセージには本文に加えて、メッセージ属性を含むことができる。メッセージ属性は、キータイプ(String, Number, Binary)、から成る。

標準キー

1メッセージ単位で、配信遅延時間を設定することができる。

FIFOキー

メッセージグループIDメッセージ重複排除IDが入力必須。メッセージグループIDが同一のメッセージは、順序が保障される。キューの設定で、コンテンツに基づく重複排除を有効化していない場合は、メッセージ重複排除IDも入力する必要がある。

重複排除間隔は、5分

メッセージの受信

可視性タイムアウトの値は、受信ソフトウェアがメッセージを処理する時間を計測して決定する。具体的には、受信ソフトウェアが処理時間よりも長く、かつリトライまで待つ時間が必要以上に長くならない値に設定すべきである。

また、ロングポーリングを設定することで空の応答を減らしたり、バッチ処理によって複数のメッセージを処理することで、SQSの使用コストを削減することができる。

メッセージのエラー処理

デッドレターキューを設定することで、処理できない問題のあるメッセージをキャプチャすることが可能である。なお、デッドレターキューにメッセージが送信されても、元のメッセージのタイムスタンプは変更されないことに留意が必要

利用シーン

SQSは、以下のような用途で使用できる。

用途 内容
ワークキュー 同時に処理できないデータを処理から切り離す
バッファリング システムにスケーラビリティと信頼性を追加
リクエストのオフロード インタラクティブな処理から遅い処理を切り離す
ファンアウト SNSと組み合わせて1つの処理を複数のキューに配信
優先順位 優先順位ごとのキューを用意