SQS FIFO キュー
メッセージの順序保証と厳密な 1 回配信を提供する Amazon SQS のキュータイプ
AWSメッセージング
SQS FIFO キューとは
SQS FIFO (First-In-First-Out) キューは、メッセージの順序保証と厳密な 1 回配信 (Exactly-Once) を提供する Amazon SQS のキュータイプである。標準キューが「少なくとも 1 回配信」で順序が保証されないのに対し、FIFO キューは送信順にメッセージを配信する。
標準キューとの比較
| 観点 | 標準キュー | FIFO キュー |
|---|---|---|
| 順序 | ベストエフォート | 厳密な FIFO |
| 配信保証 | 少なくとも 1 回 (重複あり) | 厳密に 1 回 |
| スループット | ほぼ無制限 | 300 メッセージ/秒 (バッチで 3,000) |
| 高スループットモード | - | 30,000 メッセージ/秒 |
| キュー名 | 任意 | .fifo サフィックス必須 |
メッセージグループ ID
FIFO キュー内でメッセージをグループ化し、グループ内の順序を保証する。
await sqs.send(new SendMessageCommand({
QueueUrl: 'https://sqs.ap-northeast-1.amazonaws.com/123456789012/orders.fifo',
MessageBody: JSON.stringify({ orderId: '123', action: 'create' }),
MessageGroupId: 'order-123', // 同じ注文のメッセージは順序保証
MessageDeduplicationId: 'create-123', // 重複排除
}));
グループ "order-123": [create] → [update] → [ship] ← 順序保証
グループ "order-456": [create] → [cancel] ← 別グループは並列処理
重複排除
MessageDeduplicationId を指定すると 5 分以内の同じ ID のメッセージを排除する。コンテンツベース重複排除はメッセージ本文の SHA-256 ハッシュで排除する。
使うべきケース
注文処理 (作成 → 支払い → 発送の順序が重要)、金融取引 (取引の順序が結果に影響)、ワークフロー (ステップの実行順序を保証) に適している。
使うべきでないケース
高スループットが必要なら標準キュー + 冪等性、順序が不要なら標準キュー、リアルタイム分析なら Kinesis が適している。
実践的な知識は関連書籍でも得られる。