Create an SNS topic (Standard for fan-out, FIFO only if strict ordering is required across all subscribers); create one SQS queue per downstream consumer
Subscribe each SQS queue to the SNS topic; grant SNS permission to send to each SQS queue by attaching a queue policy that allows sns:SendMessage from the topic ARN
Set a subscription filter policy (JSON object matching message attributes) on each subscription so each queue only receives relevant message subsets — this reduces processing cost and simplifies consumer logic
When publishing, include MessageAttributes that match your filter policy keys and values; messages without the required attributes are filtered out at the SNS level (not delivered to that subscription)
Enable raw message delivery on the SQS subscription if you want SQS consumers to receive the original message body without the SNS JSON envelope; leave it disabled if consumers need SNS metadata like TopicArn or MessageId
For cross-account fan-out, add the receiving account's SQS queue ARN to the subscription and ensure both the queue policy and the SNS topic policy allow the cross-account action
Known gotchas
SNS filter policies apply to message attributes, not the message body — you cannot filter on body content without attribute-based tagging at publish time
A subscription filter policy that matches no attributes on a published message causes the message to be silently dropped for that subscription; test filter policies explicitly against your publish schemas
SQS queues used as SNS subscribers must be in the same AWS region as the SNS topic; cross-region SNS-to-SQS subscriptions are not supported
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp