Aug 11 2022
Serverless technologies let us do more with less effort, time and energy. They let us focus on creating user value and let the cloud handle undifferentiated heavy-lifting like scaling and securing the underlying infrastructure that runs our code.
Serverless technologies have allowed me to accomplish tasks as a solo engineer that used to take a whole team of engineers to accomplish, and I’m able to complete these tasks in a fraction of the time and cost to my customers.
However, with great power comes great responsibility. We now have to understand and work with a wide range of different services. We need to ensure that these services are configured correctly and that we are using them in the most efficient and cost-effective way.
Serverless is great, but it’s not a free lunch! Even experienced serverless developers need help. So here are seven tools that I find very useful and they help me become a better serverless developer.
1. Serverless IDE
Serverless IDE is a VSCode extension that will save you countless hours when you work with CloudFormation, AWS SAM or the Serverless Framework.
It gives you auto-completion, schema validation and quick access to the relevant CloudFormation documentation when you hover over a CloudFormation resource.
If VSCode is your IDE of choice then this plugin is a must.
2. IAM Legend
When you work with AWS Lambda you should follow security best practices such as the principle of least privilege. That means every Lambda function should have its own IAM role and be given only the permissions it needs to do its job. However, in practice, this means writing a lot of IAM policies. Which can be a tedious and error-prone process.
IAM Legend is a VSCode extension by Sebastian Bille and it has saved me many hours of looking up AWS documentation.
It supports auto-completion for all IAM services and actions and provides inline documentation for each action, including what resources and condition keys they support as well as any dependent actions.
It even supports wildcard actions so you know which actions will be matched by the wildcard.
3. Dynobase
DynamoDB is the de-facto database for serverless applications. But the user experience in the AWS console leaves a lot to be desired. Especially in more complex environments with multiple AWS accounts and regions.
Dynobase is a professional GUI client for DynamoDB and is leaps and bounds better than the AWS console for managing DynamoDb tables and working with your data.
Not only is it much more intuitive to use, but it provides a number of useful tools that are sorely missing in the AWS console. Such as:
- Model DynamoDB tables using single table design.
- Export query and scan operations as Python or Node.js code.
- Import and export data in CSV or JSON.
- REPL for quickly testing out your code.
4. evb-cli
If you work with EventBridge on a regular basis then you owe it to yourself to check out Lars Jacobsson’s evb-cli.
It’s a common-line tool for working with EventBridge and packs some very useful commands, such as:
- A guided workflow for generating event patterns (see image below).
- A guided workflow for generating an InputTransformer object.
- Generate code bindings from the schema registry.
- Replay archived events at a pace that respects the original order of the events.
- Testing event rules locally before deploying them.
As an honorary mention, you should also take a look at Lars’ new project – EventBridge Assistant. It’s a VSCode extension that integrates with the EventBridge Schema Registry to give you auto-completion when you compose event patterns.
5. Mapping Tool
If you use API Gateway or AppSync you likely have to deal with VTL templates. It’s not everyone’s cup of tea and most people struggle to write even basic business logic in VTL. But to get the best performance, scalability and cost efficiency out of API Gateway and AppSync you should be using their built-in integration with other AWS services (the so-called “functionless” approach). Unfortunately, that means writing VTL mapping templates.
This is where the Mapping Tool by Zac Charles comes in. It’s a professional VTL editor and debugger that lets you quickly build and debug AppSync and API Gateway mapping templates.
It gives you syntax highlighting and auto-completion, including the built-in $util functions in AppSync. It performs reference checks and type checks to help you iron out bugs. And you can run local simulations to check your VTL template and see its output.
The mapping tool makes VTL palatable and helps you use API Gateway and AppSync the way they’re meant to be used.
6. org-formation
AWS recommends using multiple AWS accounts for your workload and to separate different environments (e.g. dev, test, staging and production) into their own accounts. AWS Organizations is a service that helps you manage all these accounts in one place and create guardrails and landing zones for them.
However, AWS has not fully embraced infrastructure-as-code when it comes to AWS Organizations and you’re forced to fall back to “click-ops”.
Org-formation, created by Olaf Conijn, fills this gap and lets you manage your entire AWS organization using infrastructure-as-code. I have used it successfully on multiple projects and it has allowed me to do in days what used to take a team of engineers to do in months.
What org-formation does is so revolutionary and would easily take an entire article to describe and do it justice. Instead, please check out this webinar I did with Olaf a while back and see it in action. If you’re building a non-trivial application and want to follow best practices for managing your AWS environment then you need to check out org-formation.
7. Lumigo
And finally, Lumigo is perhaps the most important tool at my disposal and has helped me troubleshoot countless issues quickly.
Issues are automatically notified through a number of built-in integration channels such as Slack. And they are captured and categorized by function and error type so I can see at a glance their frequency and trend over time.
When I decide to dive into one of these failed transactions I’m able to see the transaction in its entirety across multiple Lambda invocations. I can see all the logs for the transaction in one place. I can click on the icons in the architecture diagram to see the request and response for every API call my functions made, as well as the invocation event, return value, environment variable and logs for every Lambda invocation in the transaction.
It gives me so much visibility into what’s actually happening in my system, which makes troubleshooting live issues a snip compared to trawling through function logs in CloudWatch or some other logging platform. This is important because when you’re dealing with live issues in production you are usually under immense time pressure because live users are impacted.
Interestingly, the same capabilities that help me troubleshoot issues in production also make it very helpful during development.
When I work on a new feature, I would often use Lumigo to help me understand how my code is working and debug problems.
So these are the seven tools that you should check out and hopefully they will help you become better serverless developers just as they have done for me.