[アップデート] Amazon SNS の FIFO トピックで SQS スタンダードキューを配信先エンドポイントに指定出来るようになりました

2023.09.16

いわさです。

SNS トピックのメッセージ配信先サブスクリプションとして、SQS キューを指定するパターンはよく採用されると思います。
この SNS トピックには FIFO (先入れ先出し) とスタンダードの 2 種類のタイプがあり、要件に応じてどちらのタイプかを作成時に選択します。
また、同じ様に SQS キューでも FIFO かスタンダードかキューのタイプを作成時に選択します。

FIFO トピックの配信先サブスクリプションとして、これまではプロトコルが SQS である FIFO キューエンドポイントのみが指定可能だったのですが、先日のアップデートでスタンダードキューも指定出来るようになりました。

これまでサービス間を疎結合に保ちたい場合に SNS トピックや SQS キューでメッセージを中継することがありました。
しかしトピックタイプとキュータイプを一致させる必要があるという制限によって、特に既存のサービス間で通信させたい場合などは不都合が生じるシーンがありました。

本日は実際に設定してみたので変更前後の様子を紹介します。
また、デッドレターキューやスタンダードトピックなどの注意点も確認してみたのでそちらも併せて紹介したいと思います。

FIFO トピックにどちらのキュータイプも指定可能に

SNS コンソールを確認してみると、FIFO トピックからスタンダードキューへの配信がサポートされたという通知が表示されていました。

参考までに、アップデート前は次のように「Amazon SQS FIFO キューのみがリストされ、Amazon SNS FIFO トピックから通知を受け取ることができます」と表記されており、実際に FIFO トピックを対象としたサブスクリプションでは FIFO キューのみがリストアップされ選択出来る状態でした。

アップデート後の現在は次のようにどちらでも選択出来るような表記となっています。

また、スタンダードキューの場合にメッセージ順序がベストエフォートであることと重複排除機能について注意書きがされていますね。そりゃそうだという感じではありますが。

スタンダードキューを設定してみる

早速 FIFO トピックを指定してサブスクリプションを作成してみましょう。

なおプロトコルは引き続き Amazon SQS のみが指定可能です。
スタンダードトピックの場合は E メールや Lambda 関数など様々なエンドポイントプロトコルをサポートしているのですが、対象プロトコルは今回のアップデート後も変わりません。

エンドポイントのリストには FIFO キューの他に、スタンダードキューも表示されています。
良いですね。

以降のステップは割愛しますが、次のように設定してメッセージを受信することが出来ました。

FIFO トピックに FIFO キューももちろん指定出来る

一応確認しています。
当然ですが従来どおり FIFO キューを送信先に指定することも出来ます。

スタンダードトピックに FIFO キューは指定出来ない

ただし、その逆でスタンダードトピックに FIFO キューは指定が出来ませんでした。

スタンダードトピックに対して SQS を指定する場合はスタンダードキューのみが指定可能です。
ここもサポートしてくれると嬉しいですね。メッセージが溢れてもデッドレターキューあたりでどうにかなりそうな気もしますし。

デッドレターキューのタイプはあわせる必要がある

今話に挙がったデッドレターキューにだけ少し注意が必要です。
SNS トピックで SQS キューをエンドポイントに指定する場合にデッドレターキューを指定することが出来ます。

このデッドレターキューはエンドポイントと同じキュータイプである必要があります。
なんじょでエンドポイントがスタンダードキューであれば、デッドレターキューもスタンダードキューである必要があります。

同様にエンドポイントが FIFO キューであれば、デッドレターキューも FIFO キューである必要があります。

さいごに

本日は Amazon SNS の FIFO トピックが SQS スタンダードキューを配信先エンドポイントに指定出来るようになったので確認してみました。

これまでこの制限でうまく配信先に活用出来てなかった場合など、少し改善出来そうですね。
一方でスタンダードトピックはまだ従来どおり FIFO キューへの配信は出来ないのでご注意ください。