注文管理システムがAmazon SNSトピックに注文イベントを発行しています。メッセージにはメッセージ属性 orderStatus(値:PLACED / PAID / SHIPPED / DELIVERED)が付与されています。このトピックには3つのSQSキューがサブスクライブされています。 ・FulfillmentQueue:PLACED と PAID のみ受信したい ・ShippingQueue:PAID のみ受信したい ・AnalyticsQueue:すべてのイベントを受信したい 現在は全キューが全メッセージを受信しており、キュー側でフィルタリングしています。パブリッシャーのコードを変更せずにSNSの設定変更のみで各キューが必要なメッセージだけを受信できるようにする方法として、最も適切なものはどれですか?
SNSサブスクリプションフィルターポリシーは、メッセージ属性の値に基づいてメッセージを各サブスクライバーへフィルタリングするSNSのネイティブ機能です。JSONで条件を記述し対象サブスクリプションに設定するだけで動作し、パブリッシャーのコード変更は不要です。各SQSサブスクリプションに異なるポリシーを設定できます。 ・FulfillmentQueue:{"orderStatus":["PLACED","PAID"]} ・ShippingQueue:{"orderStatus":["PAID"]} ・AnalyticsQueue:フィルターポリシーなし(全メッセージ受信) 選択肢BのSNSトピック分割は機能しますが、パブリッシャー側のコードを変更する必要があり、「パブリッシャーのコードを変更しない」という条件を満たしません。 選択肢CのLambdaルーターは追加のコスト・レイテンシ・管理コストが発生し、SNSのネイティブ機能で解決できる問題に対して過剰な構成です。 選択肢DのEventBridgeへの移行はアーキテクチャの大幅な変更を伴い、SNSの設定変更のみで解決できる要件に対して不釣り合いです。