phew, spend a good few hours re-organizing a sizable AppSync project (150+ resolvers, ~600 resources), found a nice way to split them in the end, think now we've got some more room to grow this project 💪 here's the before and after for comparison #serverless#aws#appsync
unfortunately, the solution wasn't to just "add more nested stacks" because you also reach the 60 parameters limit because the no. of different Lambda functions & DynamoDB tables involved
in the end, I had to find a way to slice along the data sources and pull everything up (DynamoDB tables/Lambda functions/log groups/IAM roles) and down (resolvers, function configurations, IAM roles) together
slicing it this way minimizes the no. of parameters, as each group of resources (centred around a data source) is as self-contained as possible, and then I can group them into nested stacks
btw, this work is already paying dividends as I added several queries and mutations to add a new feature the client wants and that pushed us over 600 resources! good to not have to worry about these CF limits for a while and focus on shipping features
• • •
Missing some Tweet in this thread? You can try to
force a refresh
One of the most misunderstood aspects of Lambda is how throttling applies to async invocations.
Or rather, how it doesn't!
🧵
With Lambda's Invoke API, you can choose invocationType as "RequestResponse" (ie, sync) or "Event" (i.e. async).
With sync invocations, throttling limits are checked to make sure you stay within:
* regional concurrency limit
* the function's reserved concurrencydocs.aws.amazon.com/lambda/latest/…
However, this is not true for async invocations.
The Event Invoke Frontend service accepts the request and passes it onto an internal queue.
Concurrency limits are not checked at this point and are instead applied later when the internal poller attempts to invoke the function synchronously.
If you want to learn more about how Lambda works under the hood, make sure you watch @julian_wood's fantastic session from re:Invent 2022.
I have written over 800 technical articles in the last 14 years and they have been read millions of times.
I see a lot of folks making the same mistakes I did early on in my journey.
So here are some principles to help you get better at writing.
🧵
1. 𝗦𝗲𝗹𝗹 𝘁𝗵𝗲 𝗽𝗿𝗼𝗯𝗹𝗲𝗺, 𝗻𝗼𝘁 𝘁𝗵𝗲 𝘀𝗼𝗹𝘂𝘁𝗶𝗼𝗻
Like that scene in The Wolf of Wall Street where Di Caprio asked Jon Bernthal to sell him a pen.
First, create the demand, then supply the solution.
Sell the problem to the reader. Help them understand why it’s a problem worth solving.
If the readers are not interested in the problem you're solving, they won't care about whatever solution you propose, no matter how good the solution is.
Payload-based filtering was one of the key reasons to choose EventBridge over SNS. This makes SNS a much more viable option in Event-Driven Architecture.
This is a very interesting thread and the surrounding discussions. I've had similar discussions in the past, but I don't want to make too many assumptions here because I wasn't part of the conversation with the client.
First of all, serverless has been successfully adopted at a much bigger scale in other companies. LEGO for example have 26 squads working mostly with serverless, and PostNL has been all in on serverless since 2018.
So technology is probably not the problem.
From the clues I'm able to pick up, the team has given it a go but they faced tooling gaps when you have both serverful (RDS) and serverless components, and maybe needed help to navigate those hard edges and adapt their practices to work better with serverless
The "serviceful" mindset means you'll need to learn and use many services in your architecture. Having the right tool to help you along can make a world of difference. And here are 7 of my favourites.
Serverless IDE is a VSCode extension that will save you countless hours when you work with CloudFormation, AWS SAM or the Serverless Framework.
Auto-completion, schema validation, CF docs on hover, and many more.