AWS SQSとは
AWSが提供するAmazon SQSは「Amazon Simple Queue Service」の略称で、メッセージキューサービスです。ソフトウェアコンポーネント間で任意の量のメッセージを送信、保存、受信することができ、メッセージを失ったり他のサービスを利用したりする必要がありません。
この記事では、Amazon SQSの概要や特徴、使いどころや使い方、メリットなどについてわかりやすく解説します。
【参考】:Amazon SQS(サーバレスアプリのためのメッセージキューサービス)| AWS
メッセージキューサービスとは
Amazon SQSの概要を解説する前に、メッセージキューイングについて確認しておきましょう。
メッセージキューイング(MQ)は、異なるソフトウェア間でデータを送受信する手法の1つです。直接データを渡すのではなく、一旦第3者のソフトウェアに預けることで、送信側も受信側も好きなタイミングで送受信処理を行えるようにする方式です。
通常、実行中のプログラム間でのデータの受け渡しは、データの送受信のタイミングを合わせて同時に行う必要がありますが、メッセージキューイングでは担当ソフトウェアが「メッセージキュー」と呼ばれるデータ保管領域を管理し、送信側と受信側は好きなタイミングでキューに接続して一気にメッセージ交換を行えます。
メッセージキューイングは、システム間の非同期化や分散アプリケーションの通信に利用され、大規模なものやネットワーク対応のものは専用のソフトウェアを導入することが一般的です。
よく知られたミドルウェアとして、Windows OSに標準搭載されたMSMQ(Microsoft Message Queue Server)やIBM MQなどがあります。
【参考】:メッセージ キュー サービスアーキテクチャの概要 - Win32 apps | Microsoft Learn 【参考】:IBM MQ | IBM
AWS SQSの概要
Amazon SQSは、アプリケーション間でメッセージをやり取りする仕組みを提供するフルマネージドなメッセージキューイングサービスです。メッセージは一時的にキューと呼ばれる場所に格納され、アプリケーションはメッセージの送受信を簡単に行えます。
以下はAmazon SQSの主な特徴です。
フルマネージド
AWSはサーバやネットワーク機器の管理、OSやミドルウェアの設定、監視設定、障害時の復旧対応など、システム管理業務を一括して行うフルマネージドなサービスです。そこから提供されているAmazon SQSは、キューの作成から管理、スケーリングなどを自動的に行ってくれます。
スケーラビリティ
キューイングに関してエンジニアがタッチする必要はありません。負荷の増大や急増、メンテナンスなどはすべてAmazon SQSが解決してくれるため、エンジニアは開発やサービスの充実に専念できます。
セキュア
Amazon SQSでは、SSE(サーバサイド暗号化)とKMS(Key Management Service)による暗号化がサポートされており、アプリケーション間での機密情報の交換を行えます。
KMSの利用により、AWS Cloud Trail(証跡管理の仕組み)にAPIの呼び出しが記録され、監査部門などのコンプライアンス要件を満たすことが可能です。
2つのキューを提供
Amazon SQSは以下のように、2つの主要なタイプをサポートしています。Amazon SQSを効果的に活用するためには、適切なキューの種類を選択し、可視性タイムアウトを適切に設定するなどして、ベストプラクティスを守ることが重要です。
1.Standard Queue(標準キュー) 標準キューは、ほぼ無制限の数のAPI呼び出しをサポートします。メッセージは少なくとも1度は配信されますが、場合によっては複数回配信されることもあります。配信はベストエフォート方式で、 時にはメッセージは送信された順序とは異なる順序で配信されることがあります。
用途としては、スループットが重要な場合に使用します。例えば、ユーザのリクエストとバックグラウンドの処理を分離したり、複数のワーカーノードにタスクを割り当てたりする際に適しています。
2. First-In-First-Out Queue(FIFOキュー) バッチ処理を使用する場合、FIFOキューはAPIメソッドごとに最大3,000メッセージ/秒をサポートします。バッチ処理を使用しない場合、FIFOキューはAPIメソッドごとに最大300メッセージ/秒をサポートします。
メッセージは1度だけ配信され、ユーザが処理して削除するまで利用可能です。重複はキューに導入されません。メッセージは先入れ先出しで、送信と受信の順序が厳密に保持されます。
用途としては、イベントの順序が重要な場合に使用します。例えば、ユーザが入力したコマンドを正しい順序で実行したり、価格変更を正しい順序で表示したりする際に適しています。
AWS SNSとの違い
AWSにはSNSのサービスがあります。SQSと混同しないためにも、簡潔に違いを解説します。SQSはデータのキューイングサービスですが、SNSはメッセージングサービスであり、ユーザに対するプッシュ型の通知機能です。
【参考】:Amazon SNS(サーバレスアプリのための pub/sub メッセージングサービス)| AWS
SQSの料金体系
Amazon Simple Queue Service(SQS)の利用料金について簡単にまとめてみました。詳細は公式サイトで確認してください。
【参考】:Amazon SQS の料金|AWS
1.無料利用枠 毎月100万件までのAmazon SQSリクエストは無料です。100万件を超えると、標準キューは100件当たり、USD 0.40課金され、FIFOキューではUSD 0.50となります。
2.リクエストの料金 リクエストの月額料金は以下のとおりです。
・1件のリクエストには 1〜10個のメッセージを含めることができ、合計で最大256KBのペイロードを持つことができます。 ・ペイロードは64KBごとにまとめて1件のリクエストとして請求されます。例えば、256KBペイロードのAPIアクションは、4件のリクエストとして請求されます。
3.データ転送の料金 受信と送信のデータ転送に基づいて料金が発生します。同一リージョン内の Amazon SQSと Amazon EC2またはAmazon SQSとAWS Lambda間のデータ転送は無料ですが、異なるリージョン間のデータ転送は、インターネットデータ転送料金が発生します。
AWS SQSのメリットとデメリット
AWS SQSの特徴を理解したところで、利用するメリットとデメリットについて見てみましょう。
SQSのメリット
SQSの主な利用メリットとしては、以下の3点が挙げられます。1つずつ見ていきましょう。
1.スケーラビリティと信頼性 SQSはフルマネージドサービスで、キューの作成から管理、スケーリングまで自動的に行ってくれます。このメッセージキューを使用することで、アプリケーションのスケーリングと可用性を向上させることができます。
2.セキュリティ確保 メッセージの送信者と受信者を制御することができ、またメッセージの内容を暗号化することで、データの保護が可能です。
3.ベストプラクティスの活用 デッドレターキュー、ロングポーリング、バッチ処理、メッセージ属性、メッセージフィルタリングなどの機能を活用できるため、ベストプラクティスの活用と維持が可能になります。
また、SQSにLambda関数トリガーを設定することで、自動スケーリングやイベント駆動、アイドル状態のコストカットなどを実現できます。
【参考】:AWS Lambda 関数をトリガーするためのキューの設定 |Amazon SQS
SQSのデメリット
Amazon SQSには利用方法によってはデメリットとなるケースがあります。以下に記載した、デメリットについて理解した上でSQSを活用することをおすすめします。
1.順序の保証が難しい 標準キューを使用する場合は、メッセージの順序の保証がありません。Jitter(信号波形の揺らぎ)が許容できない場合にはFIFOキューを使用する必要があります。
2.細かいリトライポリシーの制御が難しい Amazon SQSは自動的にリトライを行いますが、可視性タイムアウトの設定を細かく行わないと、処理遅延やメッセージの重複などが生じるため、リトライポリシーの適切な設定が必要になります。
3.オーダリングが必要な場合は注意が必要 オーダリング(受発注)処理などで、メッセージの順序が重要な場合にはFIFOキューを選択する必要があります。標準キューでは、処理順の保証がないため、後から来たオーダリングが先に処理される可能性があります。パフォーマンス重視か、順番を重視するかの判断を適切に行いましょう。
AWS SQSの利用シナリオ
Amazon SQSは分散システム、マイクロサービス、サーバレスアプリケーションのデカップリング※とスケーリングを容易にするために設計されています。
以下はAmazon SQSの主な利用シナリオです。実際に利用する際には利用シナリオを明確にしてから利用しましょう。
※デカップリングとは疎結合とも訳される、アプリケーションの独立性を保ちながら、連携を図る技法のことです。
アプリケーションの信頼性とスケーリングの向上
Amazon SQSは、アプリケーションのコンポーネント(マイクロサービス)をキューを介して簡単にデカップリングし、接続信頼性の高い方法を提供します。またメッセージキューを使用することで、アプリケーションのスケーリングや可用性の向上を可能にします。
マイクロサービスの分離とイベント駆動型アプリケーションの処理
フロントエンドとバックエンドシステムを分離する際に使用します。例えば、銀行アプリケーションなどでフロントエンドとバックエンドを別々に処理する場合などに活用できます。
リアルタイム通知
イベント駆動型アプリケーションでのリアルタイム通知に使用されます。例えば、ユーザに対してリアルタイムのアラートや通知を送信したい場合に活用できます。
システムのデカップリング
マイクロサービスアーキテクチャでのコンポーネント間の通信を分離するために使用されます。これにより、 システムのコンポーネントがそれぞれ独立してスケーリングができるようになります。
Amazon SQSを使い分けて開発の生産性を上げよう
ここまで、Amazon SQSの入門者向けに、概要やメリット、利用シナリオなどについて解説しました。ECサイトやチャットなどの開発では、分散処理、サーバレス、マイクロサービスなどの技術が欠かせませんが、キューイングサービスは複数のアプリやサービスを結ぶために必要不可欠の機能です。
また開発や運用のコストを削減できる重要な要件ですので、エンジニアを目指す方はぜひ習得しておきたい技術の1つです。Amazon SQSは1カ月100万件までなら無料で利用できますので、AWSの無料枠を上手に使って、ぜひ試してください。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから