【あまぞんえすきゅーえす】

Amazon SQS とは?

💡 システム間の伝言を預かる「クラウドの伝言板」
📌 このページのポイント
SQS(Simple Queue Service)の仕組み プロデューサー メッセージを 送信する側 SQS キュー msg1 msg2 msg3 FIFO(先入れ先出し)で順番に処理 コンシューマー メッセージを 受信・処理 送信側と受信側を分離し、非同期で安全にメッセージを受け渡す
SQSのイメージ
ひよこ ひよこ

SQSって何のために使うの?直接通信すればよくない?

ペンギン先生 ペンギン先生

例えばECサイトで注文が入ったとき、在庫更新・メール送信・ポイント付与を全部同期でやると、どれか1つが遅いだけで注文画面が固まるよね。SQSにメッセージを入れておけば、各処理は自分のペースで取り出して処理できる。注文画面はすぐに「注文完了」を返せるんだ。

ひよこ ひよこ

StandardキューFIFOキューってどう選べばいいの?

ペンギン先生 ペンギン先生

Standardは順序がバラバラになる可能性があるけど、ほぼ無制限のスループットが出る。FIFOは厳密に順序を保証するけど、秒間300メッセージ(バッチなら3000)の制限がある。「注文処理のように順番が大事」ならFIFO、「画像のリサイズのように順番は関係ない」ならStandardがいいよ。

ひよこ ひよこ

メッセージを受け取ったのに処理に失敗したらどうなるの?

ペンギン先生 ペンギン先生

SQSには「可視性タイムアウト」という仕組みがあって、メッセージを取り出しても一定時間内に削除されなければキューに戻る。だから別のワーカーが再処理できるんだ。何度も失敗するメッセージはデッドレターキュー(DLQ)に送って後で調査できるようにするのが定石だよ。

ひよこ ひよこ

SQSって「少なくとも1回配信」って書いてあるけど、同じメッセージが2回来ることがあるの?

ペンギン先生 ペンギン先生

Standardキューではそれが起こり得るんだ。SQSは内部的に複数のサーバーにメッセージを複製しているから、タイミングによっては同じメッセージが2回配信されることがある。だから受信側は「冪等性」を確保する、つまり同じメッセージを2回処理しても結果が変わらないように作る必要がある。例えば「ポイントを100加算」ではなく「注文ID:XYZのポイントを100に設定」という処理にする。この冪等性の設計がキューベースのシステム全般で一番難しいところだったりするんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「SQS」って出てきたら「AWSメッセージキューで、システム間の非同期通信に使うものだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Simple Queue Service」 = シンプルなキューサービス
💬 Queue(キュー=待ち行列)にメッセージを入れて順番に処理するサービス。AWSで最も古いサービスの一つだよ
← 用語集にもどる