本記事の内容
本記事では、初めてSQSを扱う人やAWS認定資格取得を目指す方向けに、SQSの基礎知識を解説します。
- 概要
- 設置項目と利用シーン
- 利用料金
SQSの概要
SQS(Simple Queue Service)は、メッセージの送受信を非同期で行うマネージド型のキューサービスです。
ソフトウェアコンポーネント間で任意の量のメッセージを送信、保存、受信することができ、メッセージを失ったり、他のサービスを利用する必要もありません。
キューの流れ
より理解しやすいように、上記の図でSQSにおけるキューの流れを説明します。
送信側が、メッセージをSQSキューに送信します。
(暗号化設定を有効化する場合)メッセージは暗号化された状態で、キュー内で一時的に待機します。
キューはメッセージを受信側が取り出すまで、安全に保持します。
(暗号化設定を有効化する場合)受信側がメッセージを取り出す際、暗号化されたメッセージは復号化されます。
これによって、受信側が元のメッセージを安全に受信できます。
SQSの設定項目
SQSを作成する際には、以下項目を設定する必要があります。
①詳細(キュータイプ)
キュータイプは「標準」と「FIFO」の2種類から選択します。
①-1 標準キュー
大量のメッセージを高速で処理できる一方で、順序や重複が保証されないキューです。
標準キューの特徴
- 高スループット
- ほぼ無制限の数のトランザクションをサポートします。
- 順序保証がない
- メッセージの順序が入れ替わることがある。
- メッセージ重複
- 同じメッセージが複数回配信されることがあります。
標準キューの利用シーン
上記の特徴(メリット・デメリット)を踏まえると、標準キューは以下のシーンに適していると言えます。
- 大量データの処理
- 分散処理やリアルタイム分析など、高速かつ大量のデータを扱うシステム。
- 順序が重要でないタスク
- メール通知やバックグラウンドタスクの処理など、順番が問題とならない処理。
①-2 FIFOキュー
メッセージを送信順に1回だけ確実に処理することができる順序保証付きのキューです。
FIFOキューの特徴
- 順序保証
- メッセージを受信した順序が保持されます。
- メッセージの重複なし
- メッセージが重複することなく、1回だけ確実に処理されます。
- 制限されたスループット
- 300 件/秒 の送信、受信、削除操作がサポートされています。
FIFOキューの利用シーン
上記の特徴(メリット・デメリット)を踏まえると、標準キューは以下のシーンに適していると言えます。
- 順序が重要な処理
- 金融取引やタスクのステップ実行など、メッセージの処理順序が厳密である必要がある場合。
- 重複が許されない処理
- 注文処理システムなど、メッセージが1回だけ確実に処理される必要があるアプリケーション。
②設定
②-1 可視性タイムアウト
SQSキューからメッセージを受信した後、他の受信者がそのメッセージにアクセスできないように一時的に隠すための時間設定です。この期間中にメッセージが処理されれば、処理が完了したことをSQSに通知し、そのメッセージはキューから削除されます。
もしタイムアウトが切れる前に処理が完了しなかった場合、メッセージは再びキューに表示され、他の受信者が処理を試みることができます。この仕組みにより、メッセージの重複処理を防ぎつつ、失敗したメッセージの再処理が可能になります。
- 重複処理を避けたい場合
- 可視性タイムアウトを適切に設定することで、メッセージがまだ処理中である場合に、他の受信者が同じメッセージを取得することを防ぐため、データの一貫性や信頼性を保てます。
- 予期しないエラーが発生する可能性がある場合
- 可視性タイムアウトの間に処理が完了しなかった場合、SQSはメッセージを再度他の受信者に見える状態に戻します。これにより、障害が発生しても別の処理者が再試行でき、処理の再実行が保証されます。
②-2 配信遅延
SQSにメッセージを送信してから指定された時間が経過するまで、そのメッセージがキュー内で処理されないように遅延させる機能です。この遅延時間が経過するまでは、メッセージは受信者に表示されません。
この機能を使うと、例えばシステム内で一定時間後に実行したいタスクがある場合や、処理負荷を調整するために一時的にメッセージの処理を遅らせたいときに便利です。
- システムの負荷を調整する場合
- ピーク時に新しいリクエストを受け付けたくない場合、配信遅延を活用して一時的に処理を遅らせ、システムが軽くなった時に処理を再開できます。
- ユーザー操作に応じた処理を遅らせたい場合
- ユーザーがすぐに処理をキャンセルしたり、操作を完了する時間を考慮するために、一時的にメッセージの配信を遅らせることができます。
- 例えば、購入後すぐのキャンセル処理が起こりうる場合、遅延させることで無駄な処理を回避できます。
- データ同期や依存関係がある場合
- メッセージの処理が別のシステムの完了を待つ必要がある場合、配信遅延を設定して、先行する処理が完了してからメッセージを処理するようにできます。これにより、依存関係を考慮した処理が可能になります。
②-3 メッセージ受信待機時間
受信者がSQSキューに問い合わせした際に、メッセージがまだ存在しない場合に最大でどれだけ待機するかの時間を指します。言い換えると、受信者がSQSキューに対してメッセージ取得のためにリクエストを送信したとき、受信者は指定された待機時間(最大20秒)内に新しいメッセージが到着するのを待ちます。
「メッセージ受信待機時間」を設定すると、メッセージが無い場合でも一定時間待機して新しいメッセージを受け取れるため、受信者が頻繁にSQSキューにリクエストを送る必要がなくなり、リクエスト回数が減ってコストが削減されます。
- ロングポーリング(待機時間:設定あり)
- 待機中にメッセージが到着すると、そのメッセージがすぐに返されます。これにより、無駄なポーリングリクエストが減り、リクエスト数の削減とコストの低減が可能です。
- メッセージが頻繁に到着しない場合や、コスト効率を重視する場合に適しています。
- ショートポーリング(待機時間:0秒)
- メッセージ受信リクエストに対して、すぐに応答を返します(待機時間はゼロ秒)。その結果、キューにメッセージがない場合でもすぐに応答し、空の結果が返されます。
- リアルタイム性が求められるシステムや、キューに常にメッセージが存在する場合に使用されます。
②-4 メッセージ保持期間
SQSに送信されたメッセージがキュー内に保持される時間を示す設定です。この期間中はメッセージがキューに残り、受信者がそれを取得できる状態にあります。
メッセージ保持期間を設定することで、消費者がメッセージを受信するのに必要な時間を確保し、データの損失を防ぎます。
- 処理の遅延が予想される場合
- 処理が遅れる可能性がある場合に保持期間を長めに設定することで、受信者が後でメッセージを取得できるようにします。
- イベント駆動型アーキテクチャ
- イベントや通知の発生後、受信者がそれを処理するまでに時間がかかる場合に、保持期間を調整することで柔軟性を持たせます。
②-5 最大メッセージサイズ
SQSにおいて、単一のメッセージとして送信できるデータの最大サイズを示します。(最大:256KB)
③暗号化
③-1 サーバー側の暗号化
SQSにおいてメッセージデータを安全に保管するための機能です。この機能を使用すると、送信されたメッセージが自動的に暗号化されて保存されます。
③-2 Encryption Key Type
SQSでメッセージを暗号化する際に使用する暗号化キーの種類を指定する設定です。
- Amazon SQSキー
- SQSが自動的に管理する暗号化キー。
- ユーザーはこのキーの管理を気にする必要がなく、SQSが暗号化と復号に必要なキーを自動で生成・管理します。
- AWS Key Management Service(KMS)キー
- AWS KMSで管理されるカスタムの暗号化キー。
- ユーザーは自分自身でキーを作成、管理、ローテーションすることができます。
④アクセスポリシー
キューにアクセスできるユーザーを定義します。
コンソール画面に各項目の説明が付与されているので、ここでは詳細説明を割愛します。
⑤許可ポリシーの再実行 ※オプション
どのソースキューが、このキューをデッドレターキューとして使用できるかを定義します。
デフォルトでは、再実行許可ポリシーは無効になっています。これにより、すべてのソースキューがこのキューをデッドレターキューとして使用できるのと同じ動作になります。
⑥デッドレターキュー ※オプション
デッドレターキューは、SQSにおいて処理できなかったメッセージを保存するための特別なキューです。デッドレターキューを有効または無効に設定することで、メッセージのエラーハンドリングを管理できます。
- エラー時の調査や再処理が必要な場合
- メッセージがソースキューで指定された回数(最大受信回数)に達した場合、それらのメッセージはデッドレターキューに移動します。これにより、処理できなかったメッセージを保存し、後で調査や再処理が可能になります。
なお「最大受信数」は、SQSにおいてメッセージがソースキューからデッドレターキューに移動する条件を指定する設定です。具体的には、1つのメッセージがソースキューで最大何回まで受信されることができるかを定義します。
⑦タグ ※オプション
AWSリソースに関連付けられるメタデータの一種で、リソースを管理・整理するために使用されます。
SQSの料金
リクエスト数 × 単価
SQSはリクエスト数に応じて料金が発生します。
また単価については、キュータイプ(標準キュー/FIFO キュー)とリージョンによって変化します。
料金の詳細を把握したい方は、AWS公式サイトをご確認ください。
参考記事
本記事の解説は以上です。
ここからは、より知識を深めたい人向けに関連記事を紹介します。
SQSのユースケース
本ブログでは、AWSサービスの紹介だけではなく頻出のシステム構成も解説しています。
ハンズオン形式で解説しているので、作成手順や構築時のパラメータが気になる人にもおすすめです!
コメント