
【VPC外リージョンサービス】
SQS(Amazon Simple Queue Service)は、完全マネージド型の Queue(キュー) サービスです。
Producer(プロデューサー) が送信した Message(メッセージ) を一時的に保持し、Consumer(コンシューマー) が自身のタイミングでそれを受信・処理することで、システム間の 疎結合 を実現します。
SQSには2種類のキューがあり、Standard Queue は高スループットを特徴とし、少数のメッセージ重複を許容します。一方で、FIFO Queue(First-In-First-Out) はメッセージの順序を保証し、重複排除機能を備えています。
可視性タイムアウト により、Consumerがメッセージを処理中に他のConsumerへ同じメッセージが再配信されないよう制御できます。また、一定期間メッセージを保持する 保持期間 や、配信を遅らせる 遅延配信、処理に繰り返し失敗したメッセージを退避する DLQ(Dead-Letter Queue) などの機能により、堅牢で信頼性の高い非同期処理を実現します。
さらに、Polling(ポーリング) や ロングポーリング(Long Polling) によって効率的にメッセージを取り出し、負荷のスパイクを平滑化することが可能です。
SQSは、Lambda、SNS(Simple Notification Service)、および EventBridge などのAWSサービスと連携することで、イベント駆動アーキテクチャの中心的な役割を担い、スケーラブルで柔軟なシステム設計を支えます。
重要用語
関連サービス
ユースケース
| 非同期処理キューイング | Webアプリからの重い処理をSQSキューに入れ、バックエンドのワーカーが順次処理することでレスポンスを高速化しつつ処理を安定させる。 |
| リトライ制御とデッドレタキュー | 一時的なエラーで失敗したメッセージを自動リトライし、それでも処理できないメッセージをデッドレタキューに分離して個別に調査する。 |
| マイクロサービス間の疎結合連携 | サービス間の依存を弱めるために、直接呼び出しではなくSQSキュー経由でジョブやイベントを渡すアーキテクチャを採用する。 |
ベストプラクティス
| 可視性タイムアウトの適切な設定 | メッセージ処理時間に合わせてVisibility Timeoutを調整し、重複処理を防ぐ。 |
| デッドレタキューの利用 | 処理に失敗し続けるメッセージを別キューに退避させ、分析と再処理を行う。 |
| ロングポーリングの活用 | Long Pollingを有効にして空読みを減らし、コストとレイテンシを最適化する。 |
高可用性・バックアップ・リトライ
| 高可用性・バックアップ・リトライ設計のポイント |
|---|
| 【デフォルト】AWS内部で冗長化 ・メッセージ管理システム ・メッセージデータ本体 ・キュー定義・メタデータ ・可視性タイムアウト管理 ・遅延配信・スケジュール管理 ・メトリクス・監視データ |
| 【自動リトライ】 ポーリング側で実装する |
| 【可視性タイムアウト】デフォルト30秒 Deleteされずにタイムアウトしたら可視化され再取得される |
| 【DLQ、最大受信回数】デフォルトオフ 同じメッセージが指定回数以上受信されたら DLQ に移動する |
セキュリティ
| 関連サービス | 設定内容 |
|---|---|
| KMS(データの暗号化と鍵の安全管理) | 【メッセージ本文の暗号化が必要】 独自KMSキーを使うことを推奨(鍵操作、監査) |
| Secrets Manager(機密情報の安全管理) | - |
| SSM Parameter Store(設定情報の一元管理) | - |
| CloudTrail(操作履歴の記録・監査・追跡) | 【自動記録】 作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI) データ操作は追跡できない(データプレーンAPI) |
| Config(リソースの構成状態・設定変更を記録) | 【Configが有効な場合】 キュー設定変更履歴・暗号化/ポリシー公開/可視性タイムアウト等の準拠評価 |
| GuardDuty(脅威を自動検出) | 【GuardDutyが有効な場合】 キュー削除・ポリシー変更のAPI異常検知 |
リソースベースポリシーによる補完
実行ロールで不足する権限をSQS のリソースベースポリシーで補うパターン
| リソースベースポリシーのPrincipal | リソースベースポリシーのAction |
|---|---|
| 【SNS】 sns.amazonaws.com | sqs:SendMessage |
| 【S3】 s3.amazonaws.com | sqs:SendMessage |
| 【Lambda(DLQ)】 lambda.amazonaws.com | sqs:SendMessage |
ログ・監視
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| ApproximateAgeOfOldestMessage | 最古メッセージの経過時間 |
| NumberOfEmptyReceives | 空のReceiveMessage回数 |
| NumberOfMessagesDeleted | 削除されたメッセージ数 |
| NumberOfMessagesReceived | 受信されたメッセージ数 |
| NumberOfMessagesSent | 送信されたメッセージ数 |
| SentMessageSize | 送信メッセージサイズ平均 |
| ApproximateNumberOfMessagesDelayed | 遅延メッセージ数 |
| ApproximateNumberOfMessagesNotVisible | 処理中メッセージ数 |
| ApproximateNumberOfMessagesVisible | キューに溜まっているメッセージ数 |
| NumberOfMessagesMovedToDLQ | DLQへ移動したメッセージ数 |
| NumberOfMessagesReturnedByDLQ | DLQから戻されたメッセージ数 |
制限値(固定値/ハードリミット/ソフトリミット)
| 固定値 | 制限値 |
|---|---|
| キュー数/リージョン | 無制限 |
| インフライトメッセージ数 | 120,000(標準)、20,000(FIFO) |
| バッチサイズ | 10メッセージ |
| 標準キュースループット | ほぼ無制限 |
| デッドレターキュー | 1/キュー |
| ハードリミット | 制限値 |
|---|---|
| メッセージサイズ | 最大256 KB |
| メッセージ保持期間 | 4日(デフォルト)、最大14日 |
| FIFOキュースループット | 300 TPS(デフォルト) 3,000 TPS(高スループット) |
| ロングポーリング時間 | 最大20秒 |
| 可視性タイムアウト | 0秒 - 12時間 |
AWS CLIのサンプルコード
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| リクエスト数 | API呼び出し回数 (最初の100万件は無料) |
| データ転送 | インターネットへのデータ転送 |
| FIFOキュー | FIFOキューのリクエスト料金 |