Amazon SQSについて
Amazon SQSは、マネージド型のメッセージキューイングサービス。SQSを使用することであらゆる量のソフトウェアコンポーネント間で、メッセージの送信や保存、受信が可能となる。
SQSでは、標準キューと呼ばれる配信順序がベストエフォート型のキューと、FIFOキューと呼ばれる送信順に配信されるキューの2つが用意されている。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つの処理を複数のキューに配信 |
優先順位 | 優先順位ごとのキューを用意 |