[アップデート] Amazon SNS の FIFO トピックでも AWS X-Ray のアクティブトレース統合機能が利用可能になりました

2023.06.02

いわさです。

2 ヶ月ほど前に Amazon SNS で X-Ray アクティブトレース機能が使えるようになりました。
これによって、SNS をコンポーネントとして含む複雑なサーバーレスアーキテクチャー構成の場合でも、より詳細なトレース情報を取得することが出来るようになりました。

しかし、その時にはスタンダードトピックのみがサポート対象で、FIFO トピックでは利用することが出来ないという、ちょっと惜しい状態でした。

なんと本日のアップデートで FIFO トピックでもアクティブトレースが使えるようになりました。

設定方法

設定方法などについては前回の記事と全く同じですね。
トピックの統合タブから AWS X-Ray のアクティブトレースが有効になっているか確認が出来ます。次はまた有効化されていない状態です。

前回確認した際にはスタンダードトピックでは統合タブが確認出来ましたが、FIFO トピックでは統合タブが存在していませんでした。

トピックの作成・編集時にアクティブトレースの使用有無を選択することが出来ます。

トレースの見え方を確認

ここからは実際に確認してみましたので検証の様子を紹介します。
ただ、スタンダードトピックと特に変わりは無いですね。
検証環境の準備が前回の記事と少し異なるくらいで、X-Ray に関しては特に追加の情報はありませんでした。

前回 API Gateway (REST) に直接 SNS の Publish エンドポイントをマッピングさせていました。トピックを変更するだけなのでこのまま使えそうです。
実行ロールに今回のトピックへの Publish アクションだけ許可をしてやると良いだろうか。

% curl -X POST "https://6c3vfsbkd6.execute-api.ap-northeast-1.amazonaws.com/Stage/sns?Message=aaaa&topicArn=arn:aws:sns:ap-northeast-1:123456789012:hoge0602.fifo"
{"Error":{"Code":"InvalidParameter","Message":"Invalid parameter: The MessageGroupId parameter is required for FIFO topics","Type":"Sender"},"RequestId":"9d027019-522b-506d-943b-2cea76fc0c15"}

実行してみるとMessageGroupIdが指定されていないというエラーが発生しました。
FIFO トピックに Publish する場合は MessageGroupId の指定が必要でした。

次のように他のパラメータと同様にクエリ文字列で指定するようにしてみます。

% curl -X POST "https://6c3vfsbkd6.execute-api.ap-northeast-1.amazonaws.com/Stage/sns?Message=aaaa&topicArn=arn:aws:sns:ap-northeast-1:123456789012:hoge0602.fifo&messageGroupId=11111"
{"Error":{"Code":"InvalidParameter","Message":"Invalid parameter: The topic should either have ContentBasedDeduplication enabled or MessageDeduplicationId provided explicitly","Type":"Sender"},"RequestId":"bcf43444-69f6-545f-bb06-68b74eabecb4"}

今度は ContentBasedDeduplication を有効化するか、MessageDeduplicationId を指定するかしろと言われました。なるほど。

トピックの「コンテンツベースのメッセージ重複排除」を有効化しましょう。

% curl -X POST "https://6c3vfsbkd6.execute-api.ap-northeast-1.amazonaws.com/Stage/sns?Message=aaaa&topicArn=arn:aws:sns:ap-northeast-1:123456789012:hoge0602.fifo&messageGroupId=2222" 
{"PublishResponse":{"PublishResult":{"MessageId":"4b3a22a1-61b5-5c89-b558-7e52461a2e38","SequenceNumber":"10000000000000003000"},"ResponseMetadata":{"RequestId":"5e868fec-461b-5138-80dd-d31f61ac2f81"}}}%

ようやくメッセージを送信することに成功しました。

トレースマップとセグメントタイムラインは次のような形で記録されました。
FIFO トピックまでサブセグメントの様子がトレース出来るようになっていますね。

以前はなんのトピックなのかがよくわかりませんでしたが、アクティブトレースを有効化するとサービスマップのほうでも把握出来るようになっています。

さいごに

本日は Amazon SNS の FIFO トピックでも AWS X-Ray のアクティブトレース統合機能が利用可能になりましたので、実際に使った様子などを紹介しました。

特に重複処理関係で FIFO トピックを使うことは多く、スタンダードのみでは十分ではなかったので、これはかなり嬉しいですね。