😕

[SQS] InvalidParameter

標準キューに以下のパラメータで Enqueue しようとしたら InvalidParameter だと言われた。

input := &sqs.SendMessageInput{
    DelaySeconds: nil,
    MessageBody:  awssdk.String(string(marshaled)),
    QueueUrl:     awssdk.String(config.AWS.SQS.QueueURL),
    MessageGroupId: aws.String("test"),
    MessageDeduplicationId: aws.String("test"),
}

MessageGroupIdMessageDeduplicationId の指定を削除すると、正常に Enqueue できた。

input := &sqs.SendMessageInput{
    DelaySeconds: nil,
    MessageBody:  awssdk.String(string(marshaled)),
    QueueUrl:     awssdk.String(config.AWS.SQS.QueueURL),
    // MessageGroupId: aws.String("test"),
    // MessageDeduplicationId: aws.String("test"),
}

できた! MessageGroupIdMessageDeduplicationId は FIFO キューでのみ指定できるプロパティだった

$ go run sqs.go
([]*sqs.SendMessageBatchResultEntry) (len=1 cap=1) {
  (*sqs.SendMessageBatchResultEntry)(0xc0002ae4b0)({
    Id: "id",
    MD5OfMessageAttributes: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    MD5OfMessageBody: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    MessageId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  })
}

MessageGroupId

The message group ID is the tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are always processed one by one, in a strict order relative to the message group (however, messages that belong to different message groups might be processed out of order).1

メッセージが複数種類あるとき、メッセージの種別ごとに特定の MessageGroupId を指定すれば、同じグループに所属するメッセージ内で順序が保証される。 特にグループ分けする必要がなければ、適当な固定値をセットすれば OK。

MessageDeduplicationId

💁‍♂️ PHP で SQS の FIFO キューを使った時のメモ