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 が適している。

実践的な知識は関連書籍でも得られる。

関連用語