PR

AWS SQSをざっくり理解する|Lambdaとの使い分けまで解説

Amazon SQS クラウドニュース

例えばECサイトで注文が入ったとき、

を1本の処理でつないでいると、どこか1つが詰まっただけで全体が止まってしまいます。

しかも、処理が終わるまで次のリクエストを受け付けられない、なんてことも起きがちです。

こういう「処理の詰まり」や「連鎖的な障害」を防ぐために使われるのが、Amazon SQS(Amazon Simple Queue Service)です。

SQSはメッセージをいったん「キュー(待ち行列)」に預ける仕組みで、送る側と処理する側を切り離してくれます。
片方が遅くても・止まっても、もう片方は影響を受けずに動き続けられるんです。

この記事では、SQSの基本・料金・Lambdaとの連携、そして最近使いやすくなったLambda処理の一時停止機能との使い分けまで、ざっくり整理していきますね。

そもそも「キュー」って何?

キュー(Queue)とは、日本語で「待ち行列」のこと。
先に入ったものが先に出てくる、FIFO(First In, First Out)の仕組みです。

お店のレジをイメージするとわかりやすいかもしれません。
並んだ順に会計されていく、あの列がまさにキューです。

SQSでは、この「キュー」をAWSのマネージドサービスとして提供しています。

  • メッセージを送る側(プロデューサー)
  • 処理する側(コンシューマー)

この二つを切り離します。

プロデューサーはキューにメッセージを入れるだけ・コンシューマーは自分のペースで取り出して処理する、という流れになります。

SQSで何ができるの?

SQSの主な機能をまとめてみました。

  • メッセージの一時保存
    最大14日間、メッセージをキューに保持できます。
    処理側がダウンしていても、メッセージが消えずに残ってくれます。

  • システム間の非同期連携
    送信側と受信側が直接つながらなくていいので、片方が遅くても・止まっても影響を最小限にできます。

  • スケーリングのバッファとして機能
    急にリクエストが増えても、キューがメッセージを受け止めてくれます。
    処理側は自分のペースで消化できます。

  • デッドレターキュー(DLQ)
    何度やっても処理できないメッセージを別のキューに移す仕組みです。
    エラーの原因調査ができ、本来のキューを詰まらせずに済みます。

キューの種類:標準キューとFIFOキュー

SQSには2種類のキューがあります。

種類順序保証重複スループット向いている用途
標準キューなし(おおよそ)あり得るほぼ無制限ログ収集・画像変換など
FIFOキュー厳密に保証なし最大3,000件/秒決済・在庫管理など順序が重要な処理

ざっくりまとめるなら「とにかくたくさん処理したい」なら標準キュー、「順番が崩れたら困る」ならFIFOキューを選ぶイメージでしょうか。

どんなときに使うの?

SQSが特に活躍する場面を考えてみました。

  • 処理に時間がかかるタスクを非同期にしたいとき
    画像のリサイズ・PDF変換・メール一括送信など、すぐに終わらない処理をバックグラウンドに逃がせます。

  • トラフィックの波を吸収したいとき
    セール開始直後のような急激なリクエスト増加をキューで受け止め、後ろの処理が壊れないようにできます。

  • マイクロサービス間の連携
    サービスAからサービスBへのデータ受け渡しにSQSを挟むことで、直接の依存を避けられます。

  • 処理の順序を守りたいとき
    FIFOキューを使えば、入った順番どおりに処理させることができます。

逆に、リアルタイム性が最優先の用途(チャットや株価更新など)には向いていません。
そういった場合はWebSocketやAmazon SNSとの組み合わせなど別のサービスを検討してみてください。

お金はどのくらいかかるの?

SQSの料金は、リクエスト数に応じた従量課金になっています。(2026年4月現在)

キューの種類無料枠(毎月)無料枠超過後
標準キュー100万リクエスト$0.40 / 100万リクエスト
FIFOキュー100万リクエスト$0.50 / 100万リクエスト

もちろん、無料枠も用意されていて、個人開発や学習用途なら、十分使える場合がほとんどです。

なお、1リクエストで送受信できるメッセージの最大サイズは256KBです。

それを超える場合はS3に本体を置いてSQSにはポインタだけ渡す、という設計がよく使われます(Java拡張クライアントライブラリがこれをサポートしています)。

Lambdaと組み合わせるとどう動くの?

SQSはLambdaと非常に相性がよく、実際の現場でもよく使われている組み合わせです。

仕組みはシンプルです。

イベントソースマッピングという設定を作ることで、LambdaがSQSを自動でポーリング(監視)し、メッセージが届いたら関数を呼び出してくれます。

ポーリングの仕組みはAWSが管理してくれるので、自分でポーリングコードを書く必要はありません。

処理の流れはこうなります。

  1. SQSキューにメッセージが届く
  2. Lambda がキューをポーリングし、メッセージをバッチで取得する
  3. Lambda 関数が呼び出され、メッセージを処理する
  4. 処理成功 → メッセージをキューから削除 / 処理失敗 → 可視性タイムアウト後に再試行

Lambda 側で設定できる主なパラメータも覚えておくと便利かもしれません。

  • バッチサイズ:1回の呼び出しで処理するメッセージ数(最大10,000件)
  • バッチウィンドウ:メッセージを集める最大待ち時間(0〜300秒)。まとめて処理するほど呼び出し回数を減らせます
  • 最大同時実行数:並列で動くLambda関数の上限。後ろのシステムへの負荷を制御するときに使います

Lambda のイベントソースマッピングを一時停止できるようになった

イベントソースマッピングを一時停止(Disabled)してあとから再開できる機能が使いやすくなっています。

これは、UpdateEventSourceMapping API の Enabled: false を使って、キューにメッセージを貯めたまま処理だけを止めることができる仕組みです。

どんな場面で使えるかというと、こんなシーンが考えられるでしょう。

  • デプロイ・メンテナンス中:Lambda関数を更新している間だけ処理を止めて、メッセージはキューで待機させておける
  • 後段システムの障害時:DBが落ちているなどの状況で、SQS側の処理だけ一時停止し、復旧後に再開する
  • 調査・デバッグ中:本番キューのメッセージをそのままにして、問題の調査時間を確保する

コンソールからの設定方法

  1. AWSコンソール で Lambda を開く
  2. 対象の Lambda 関数を選択 → 「設定」タブ → 「トリガー」を開く
  3. SQS トリガーを選択し、「編集」をクリック
  4. 「トリガーを有効化」のチェックを外して保存
  5. 再開するときは同じ手順でチェックを入れ直す

SQSとLambdaの一時停止、どう使い分ける?

「メッセージ処理を止めたい」という目的は同じでも、SQS側で操作するか、Lambda側で操作するかで少し意味合いが変わります。

操作何が止まるかメッセージはどうなるか主な用途
Lambda のイベントソースマッピングを無効化Lambda によるポーリングが止まるキューに残り続ける(最大14日)Lambda 関数の更新・後段障害時の保護
SQS のキューへのアクセスをIAMで制限送信側・受信側の両方を止められるアクセス不可になる完全にトラフィックを遮断したいとき
SQS のメッセージ保持期間を短くする古いメッセージを自動削除できる期限切れで削除される溜まったゴミメッセージを整理したいとき

「Lambda だけ止めて、メッセージはキューで待機させておきたい」という場面では、イベントソースマッピングの無効化が一番シンプルな方法ですね。

なお、一時停止中もSQSのキューにメッセージが残っている限り、メッセージの保管コストはかかり続けます

無料枠の範囲内なら気にしなくていいですが、長期間止める場合は注意してくださいね。

キューで「つながりすぎない」設計ができる

Amazon SQS は、シンプルに見えて、システム設計の考え方を変えてくれるサービスです。

「同期的に処理をつなぐ」から「キューを介して非同期につなぐ」に変えるだけで、片方が止まっても全体が止まらない、スパイクに強い設計が実現できます。

Lambda と組み合わせると、コードを書くだけで非同期のメッセージ処理基盤が作れてしまうのが、AWSらしい魅力のひとつですよね。

まずは無料枠の範囲でキューを作って、Lambdaと連携させてみるのがオススメです。
触ってみると、キューの使いどころが一気にイメージしやすくなるかもしれません。


タイトルとURLをコピーしました