無限ノック › DVA 練習問題一覧 › 問題
DVAAWSのサービスを使用した開発

注文管理システムがAmazon SNSトピックに注文イベントを発行しています。メッセージにはメッセージ属性 orderStatus(値:PLACED / PAID / SHIPPED / DELIVERED)が付与されています。このトピックには3つのSQSキューがサブスクライブされています。 ・FulfillmentQueue:PLACED と PAID のみ受信したい ・ShippingQueue:PAID のみ受信したい ・AnalyticsQueue:すべてのイベントを受信したい 現在は全キューが全メッセージを受信しており、キュー側でフィルタリングしています。パブリッシャーのコードを変更せずにSNSの設定変更のみで各キューが必要なメッセージだけを受信できるようにする方法として、最も適切なものはどれですか?

A
各SQSサブスクリプションにJSONフォーマットのフィルターポリシーを設定し、orderStatus属性の値に基づいてメッセージをルーティングする
✓ 正解
SNSフィルターポリシーはサブスクリプション単位でJSON条件を設定でき、メッセージ属性の値に基づいてフィルタリングできる。パブリッシャーの変更不要でSNS設定のみで要件を達成できる。
B
注文ステータスの値ごとにSNSトピックを個別に作成し、パブリッシャーが各ステータスを対応するトピックに発行するようコードを変更する
トピックを分割すればフィルタリングは実現できるが、パブリッシャーがステータスごとに異なるトピックへ発行するようコードを変更する必要があり、「パブリッシャーのコードを変更しない」条件に反する。
C
Lambda関数をSNSにサブスクライブさせて全メッセージを受信し、orderStatus属性の値に応じて各SQSキューへ転送するルーターを実装する
Lambdaルーターで同等の機能を実現できるが、Lambda実行コスト・処理レイテンシ・関数管理の手間が増加する。SNSのネイティブフィルター機能で解決できる問題に対して過剰な構成となる。
D
SNSトピックをAmazon EventBridgeのイベントバスに置き換え、イベントパターンで各SQSキューへメッセージをルーティングする
EventBridgeへの移行はイベントパターンによる高度なルーティングが可能だが、既存のSNSアーキテクチャを大幅に変更する必要があり、フィルターポリシーで対応できるこの要件には過剰な変更となる。

解説

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

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る