Category: Technical
-

End-to-end email testing with SES and SQS
The AWS News Feed has an extensive end-to-end testing suite, but email validation has always been a challenge. In this post I will describe how I implemented end-to-end email testing with SES and SQS.
-

Develop software quickly by starting slowly
One of the most interesting aspects about software is that it is never done. In this article I will share how we used onion architecture to deal with uncertainty, and how a small investment in design yielded big payoffs only weeks later.
-

AWS is on its way to full IPv6 support
Is 2025 going to be the year of broad IPv6 adoption? For AWS, it might just be. In the past months many services have gained IPv6 support, which paves the way for IPv6-only VPC configurations.
-

Making AWS News stupid fast with smart caching
As I’m typing this, Re:Invent 2024 is only weeks away. In anticipation of AWS News’ busiest period of the year, I redesigned the API access patterns to support very efficient caching. This resulted in significantly reduced backend load and a much faster frontend.
-

Five lessons from a minor production incident
This morning, AWS News had a minor production incident. The platform sends out a daily digest of the most popular AWS news articles, but today, it didn’t. The problem wasn’t hard to find or solve – but it did teach me a few things.
-

Retrieval-Augmented Generation (RAG) simply explained
In this article, we will explain that RAG is really nothing more than saying: hey LLM, here is a bunch of data, can you tell me about it?
-

Serverless OpenTelemetry at scale: generating traces
In the second installment of the Serverless OpenTelemetry at scale series we will look at the way we generate and propagate telemetry in a serverless environment.
-

Serverless OpenTelemetry at scale: the PostNL context
In the first installment of the Serverless OpenTelemetry at scale series we will cover the PostNL context and need for observability.
-

Evolve data structures in NoSQL with Python data models
This article explores design patterns to support backward compatibility when evolving your DynamoDB data structures.
-

Creating a serverless Re:Invent session tracker
If you’ve ever attended Re:Invent, you’ll know that keeping track of which sessions to attend is extremely difficult. To stay ahead of the game, I built a session tracker. And of course, it’s serverless. In this article I’ll highlight the more interesting design decisions.
-

Authorizing cross-account KMS access with aliases
KMS aliases are a great way to make KMS keys more convenient. But permitting one account to use an KMS key in another account through a KMS alias can be difficult. This article explains why, and how to solve the problem correctly. Let’s start with the example shown in the diagram above. Account B has…
-

Serverless Messaging: Latency Compared
In this article we will compare the latency introduced by common messaging services: SQS, SNS, Step Functions, EventBridge, Kinesis, and DynamoDB Streams.
-

Implement the Priority Queue Pattern with SQS and Lambda
A queue is a buffer for constrained resources. A priority queue is an additional queue that should be emptied first, even when the main queue has millions of items on it. This allows important messages to be processed quickly, regardless of system load. In this article, we will show how to implement the priority queue…
-

When is the Lambda Init Phase Free, and when is it Billed?
This article will demystify when the AWS Lambda init duration is free, and when it is billed.
-

Lambda Cold Starts and Bootstrap Code
In this article we will explore the lambda bootstrap code and its effects on cold starts.
-

Async Lambda Function Retries with Backoff and Jitter
In this post we’ll implement a custom async Lambda retry handler with exponential backoff, full jitter, and delays up to 12 hours.
-

The 9 Ways an SQS Message can be Deleted
Over the years many features and integrations have been added to SQS. Some of these features introduce new, and sometimes surprising, ways for a message to disappear. In this article we will look at nine ways a message can be removed from an SQS queue.
-

Reliable Auto-Incrementing Integers in DynamoDB
In this article we will use DynamoDB Transactions, Conditions, and Atomic Counters to achieve reliable auto-incrementing IDs at any scale.
-

Anonymous User Identities with Cognito Lambda Triggers
In this article we will use Cognito Lambda Triggers to avoid personally identifiable information (PII) altogether, allowing for completely anonymous user sign-ups.
-

Monitor Events from Multiple S3 Buckets with EventBridge
S3 Buckets can be configured to stream their objects’ events to the default EventBridge Bus. This is an on-or-off toggle per Bucket. When multiple buckets have EventBridge notifications enabled, they will all send their events to the same Event Bus. In this article, we will use this to respond to events across multiple S3 Buckets.
-

Filter DynamoDB Event Streams Sent to Lambda
Event Source Mappings are the invisible engine converting streams and queues to batches. In this article we will dive deep on Event Source Mappings and its filtering capabilities.
-

Cache Control with CloudFront Functions
In this article we will cover how we can configure and instruct our CDNs and browsers to optimally cache our assets. We will use CloudFront behaviors to configure the CDN and CloudFront Functions to add HTTP caching headers.
-

The Anatomy of a CloudFront Distribution
CloudFront is a Content Distribution Network (CDN). It reduces latency and load on backend servers. In this article we’ll look at the various components of a CloudFront distribution.