見出し画像

【AWS】 SQSの解説

Amazon Simple Queue Service(SQS)

AWSのフルマネージド型メッセージキューサービスであり、アプリケーションコンポーネント間でのメッセージ送受信を簡素化する。主に、アプリケーション間の非同期通信を実現し、システムのスケーラビリティと信頼性を向上させるために使用される。


キューの種類

スタンダードキュー

高いスループットを持ち、メッセージの順序はほぼ保たれるものの、時折順序が入れ替わることがあり、メッセージが少なくとも一度は配信されるが、稀に重複して配信される場合がある。大量のデータやイベントを迅速に処理する必要があるアプリケーションに適している。

FIFOキュー

First-In-First-Outのモデルを採用しており、メッセージが送信された厳密な順序で配信され、重複配信が発生しないよう設計されている。処理の順序が重要な銀行取引や注文システムなど、一度のみの正確なメッセージ配信が必要な場合に使用される。

遅延キュー

キュー全体に適用されるデフォルトの遅延設定を提供し、この設定により、キューに送信されたすべてのメッセージは、指定された遅延時間が経過するまで利用可能にならない。デフォルトでは遅延時間は0秒に設定されているが、最大15分(900秒)まで設定可能。
たとえば、ユーザーが注文をキャンセルする機会を与えるために注文処理を遅らせたい場合や、バッチ処理をする場合に適している。

  • 遅延キューはキュー全体に対して一律の遅延時間を設定する。システム全体の負荷を平準化するために使用される。

  • メッセージタイマーは個々のメッセージごとに遅延時間を設定する。特定のメッセージだけを遅らせて処理したい場合に使用される。

メッセージタイマー

特定のメッセージを遅延させて処理するためのもの。キューにメッセージが送信された後、指定された遅延時間が経過するまでそのメッセージは利用できないようにする。この機能は、各メッセージごとに異なる遅延時間を設定できるため、特定のイベントや条件に基づいて処理タイミングを調整する。

デッドレターキュー

メッセージが正常に処理されない場合や、指定された再試行回数を超えた場合に、このキューに送られる。これにより、失敗したメッセージを追跡し、適切な対処を行うことができる。
AWS Lambda関数を使用して、DLQに移動されたメッセージを監視し、再処理を試みる。例えば、Lambda関数をトリガーしてメッセージを再試行し、問題が解決したら元のキューに戻すことができる​。


そのほかの機能

可視性タイムアウト

SQSメッセージをアプリケーションやサービスに返した後、そのメッセージを他のアプリケーションやサービスから見えない状態にする仕組み。この間にアプリケーションはメッセージを処理し、削除する必要がある。
もしアプリケーションが処理中に失敗し、メッセージを削除できなかった場合、可視性タイムアウトが経過するとメッセージは再びキューに戻り、他のアプリケーションが再度受信することになる。
デフォルトの可視性タイムアウトは30秒で、最大12時間まで設定可能。この設定はキュー全体に適用されるが、特定のメッセージに対して異なるタイムアウトを設定することもできる

1つのメッセージが同時に複数のアプリケーションやサービスによって処理されることを防いだり、メッセージの処理が失敗した場合、そのメッセージがずっと処理され続けることを防ぐ目的で使用される。一定回数の再試行の後、デッドレターキューに移動することも可能。


ロングポーリング

SQSキューからメッセージを取得する際に、キューが空であっても一定の時間(最大20秒間)待機する方法。この間にメッセージが到着するとすぐに取得される。
頻繁にポーリングする必要がなくなるため、APIリクエストの数を減らし、コストを削減できる。メッセージの到着頻度が不規則な場合や、システムが常にメッセージを待機している必要がある場合に特に有効。

ショートポーリング

SQSキューからメッセージを即座に取得し、キューにメッセージがなければすぐに応答を返す方法。メッセージがキューに存在しない場合、すぐに「メッセージがありません」と返される。キューへのアクセス頻度が高い場合に有効。
メッセージの到着頻度が高く、常にメッセージが存在することが予想されるシステムやリアルタイムでメッセージの処理が必要なアプリケーションに用いられる。

比較
ロングポーリングは、待機時間中にメッセージを取得するため、APIリクエスト数を減らし、コストとリソースの効率を向上させる。ショートポーリングは即時応答が特徴で、キューに頻繁にアクセスするシステムに向いている。


ファンアウト

SQSとSNSを組み合わせて、メッセージを複数のキューに同時に配信する方法。この方法を使うと、単一のメッセージを複数のシステムやアプリケーションに同時に送信できるため、イベントに関連する複数の処理を並行して実行できる。
設定するためには、まずSNSトピックを作成し、そのトピックに複数のSQSキューをサブスクライブする。

キューの作成

構成例

SQSとAWS Lambdaの連携

SQSとAWS Lambdaを組み合わせることで、メッセージがキューに到達すると自動的にLambda関数がトリガーされ、そのメッセージを処理する。この構成により、サーバーレスアーキテクチャを実現できる。Lambdaは、イベントソースマッピングを使用してSQSからメッセージをポーリングし、メッセージが到着すると関数が自動的に実行される。これにより、キューにメッセージが追加されるたびに即座に処理が行われ、リアルタイムでのイベント処理が可能になる。

SQSとAmazon S3の連携

SQSはAmazon S3と連携して、オブジェクトのイベント通知を管理するために使用できる。例えば、S3バケットに新しいオブジェクトが追加された際にSQSキューに通知を送信し、その通知を処理するアプリケーションがSQSからメッセージを受信して処理を行う。この構成により、S3に保存されたデータのリアルタイム処理や、データのETL(抽出・変換・ロード)パイプラインを自動化することができる。

SQSとAWS Step Functionsの連携

AWS Step FunctionsとSQSを連携させることで、複雑なワークフローを構築し、メッセージの処理をオーケストレーションできる。Step FunctionsのステートマシンがSQSキューにメッセージを送信し、そのメッセージが処理されると次のステップに進むように設定できる。この構成により、エラー処理や条件分岐を含む複雑なビジネスロジックを実装することが可能になる。












この記事が参加している募集

#創作大賞2024

書いてみる

締切:

よろしければサポートお願いします!よりいい情報を発信します。