Hi Reader ππ½
This is another issue that is all about messaging systems and patterns. It is the last one of this series. After that, we continue with more networking services πͺ
This time we talk about the service Simple Notification Service or better known as SNS π¨
To get you excited, here is one upfront guessing question: What's the subscription limit per topic? π€ Scroll down to find the answer.
But now let's get into the overview of this issue:
Let's get into it! π
Amazon SNS is a fully managed publish & subscribe service.
The fundamentals are quite simple:
Subscribers can either be personal applications like smartphone notifications, emails, or SMS. A subscriber can also be another AWS Service.
SNS publishes messages to subscribers with a push-based model. Once a message comes in, SNS pushes out the message to its subscribers immediately.
SQS on the other hand is a poll-based mode. That means a message remains in a queue and consumers poll this message.
SNS supports a lot of different destinations to which it can deliver messages. SNS distinguishes those into two endpoint groups:
SNS works exceptionally well for the use-case of sending a message to many subscribers. This pattern is called Fan-out.
This is also the major difference to SQS, as SQS only has one consumer per message (excluding the cases where reprocessing is happening due to errors).
As with other AWS services, SNS is fully integrated with IAM. This means you can control access to your topics via topic policies.
You can also encrypt your data in SNS. You need to encrypt the message in two places, in transit and at rest.
SNS handles the whole encryption process on the server side. You can either use a key of AWS's own Key Service (KMS) or provide a custom one. This will encrypt all sensitive data in your message.
In SNS you can choose two different types of topics.
Message filtering allows you to send only a subset of messages to subscribers. You can assign filter policies that check the message for certain attributes. If a message meets these policies, SNS sends it to the subscriber. This allows a flexible routing mechanism.
The filter policy can be applied both to Message Attributes and the Message Body.
In the example, we're filtering based on the message payload isBlogPost. Some of our subscribers are ignoring messages that have this field set to true, while all of them are listening to messages that have the field set to false.
For each delivery protocol, SNS defines a delivery policy. With this protocol, you can define how retries are happening. Retries will only happen on server-side errors.
Compared to SQS, SNS is not aware of errors happening inside of your Lambda function.
SNS only cares about sending out your messages. That means once your message is out it is successfully processed by SNS.
If your Lambda function fails to work on the message the delivery protocol will not be aware of that. SNS calls your Lambda function asynchronously. We highlight this because this is very often misunderstood.
A common server-side error is a missing IAM policy. If your topic isnβt allowed to call a Lambda function a server-side error will occur.
Another error would be if the Lambda API is down but this doesnβt happen very often (fortunately).
With the delivery protocol, you can then define retries.
SNS is a serverless service. You donβt have any fees if you donβt use it. The charges are completely usage-based.
Free Tier: The free tier covers 1 million requests, 100k notifications, 100 SMS, and 1000 notifications via email every month.
SNS is an amazing service to build high-throughput, customer-facing applications. The ability to use application and personal endpoints are amazing in SNS.
That's it for today. We hope you've enjoyed this issue!
See you in two weeks!
Sandro & Tobi π
P.S.: there can be 12,500,00 subscribers per topic! π₯
This week, we want to give a huge shout-out to Allen Helton. Watching Allen's story unfoldβfrom becoming an AWS Community Builder and AWS Hero to joining the amazing Momento teamβhas been amazing.
Allen shares a lot of content through his newsletter, blog, and podcast. He is always happy to assist you if you need help with anything cloud-related. Thanks, Allen!
Still hungry for AWS content? Have a look at our blog! π β
We teach AWS for the real world - not for certifications. Join more than 10,500 developers learning how to build real-world applications on AWS.
AWS FOR THE REAL WORLD β±οΈ Reading time: 10 minutes π― Main Learning: Every convenience layer AWS built on ECS is dead or dying, while ECS itself has not changed since 2014. Build on the primitive, and make the layer above it prove itself first. π Blog Post Hey Reader ππ½ Getting started with an AWS service often feels more complicated than it should. Four concepts must be understood before a single container runs. A VPC is required before a single request. So, the fancy CLI that promises to do...
β±οΈ Reading time: 21 minutes π― Main Learning: Same CloudFront logs: 12.5s through Kinesis, S3, Glue and Athena, about 1s through Tinybird's managed ClickHouse. π Blog Post Hey Reader ππ½ We've been running Plausible for the analytics on awsfundamentals.com. Good software, no complaints. We still wanted the data to be ours: our retention, our schema, nobody's script in the visitor's browser. So we built the dashboard ourselves. Twice, on two different backends, fed by the same CloudFront logs....
AWS FOR THE REAL WORLD β±οΈ Reading time: 11 minutes π― Main Learning: A Karpenter NodePool is a placement policy, not an instance preference. Pin one instance family, and a Spot shortage moves your fleet across availability zones, where every internal call starts costing $0.01 per GB. π Blog Post Hey Reader ππ½ Important off topic things first: Sandro got married! πWe were in Munich for it and it was a fantastic day! βοΈHighly recommend a wedding over sprint planning or fighting with AWS...