I’ve been using AWS Lambda in anger as our production serverless platform for over 6 months now, and I love it.
I have however come across a number of things that I would like to be able to do, that I can’t.
So, I thought I’d share a few of them here and see what others thought. In no particular order…
Multiple Test Events
At present, when you test the code in the web view, you can setup a test event and see what happens. Simple enough of course. You can check your code.
But my testing involved more than just one test. Of course I can get the code on my local machine and test it from there, but that feels clunky.
The idea of a lambda function as a test harness is a good one, but it’s really not quite there yet.
What would make me happy is to have a series of tests that I could run either as unit tests or load tests. Then I could change the code, and then run the stored tests and I would be more confident of changes working.
It just seems a little odd to only have one test available when the option for multiple tests would seem trivial to add in.
Private Shared Libraries
Currently, I’m using node.js as my programming language. I could have used python, but went with node purely because it feels more appropriate for AWS Lambda.
During the process of developing multiple Lambda functions, I’ve created a number of reusable components.
Sensible you say!
I thought so too.
But there’s an issue. At present, if I update a library module, then to spread that library across all the Lambda functions that use that library, I have to update each and every single one.
Which is very annoying.
What would be great is a private, shared repository of modules that I can update separately from AWS Lambda functions, but that will automatically update any functions that use it.
If you had a checkbox in each function to say include private modules, that would be perfect. You could hide the modules from functions that don’t need it, and have a single point of upload for those modules elsewhere.
It may make sense to have multiple possible private modules, but even one would be helpful.
Just a thought.
Improved Web Interface for .zip uploads
There are times when I need a quick fix, or a quick change to something.
There are a number of functions I can edit in the web editor because they are small and don’t need anything complicated. I can easily edit those.
However, there are other functions that need the .zip upload feature due to the need for specific modules to be included to allow them to work.
Firstly, there is no way to download that .zip file (which seems odd) so to do that you should upload to S3 and use that .zip, which gives you access to it.
Surely I should be able to download the .zip?
Then edit the zip wherever I want and re-upload. Of course, it would be much nicer if you could actually edit it in the browser, but I can see why that might not work.
Secondly, there is no edit function. The function to run against the event is a single function that you specify, so surely, the file containing this function should be editable in the interface?
It would make life a lot easier for small changes. And if you add in the improved testing, you have yourself a much more useful web interface for those times when you are not at your desk and need to make a quick change (for whatever reason).
We don’t all live in the world of massive dev teams and fault tolerant and robust testing robots with “death by fire” solutions for any bugs found. Some of us work at startups!
The ability to move an alias
This may seem trivial, but aliases are great. They are superb for ensuring that the code that you want to be running for production is running. Each alias has it’s own ARN so that means you can direct requests to that alias and moving the alias changes the code.
You can from the AWS CLI “update” an alias e.g. move an alias from one version of the code to another. Yippee!
But in the web interface you can’t.
WHY NOT???? Aaaaargh!
You can however delete an alias and then create the same alias again on a different version.
Again, when on the move (as a startup-type person often is), I’d like to be able to go in on my phone/tablet and just “update an alias” instead of the prospect of breaking my API/functions for a short period.
Seems trivial, but these kind of things bug me intensely.
Am I being too picky?
And this is only AWS Lambda. I haven’t even tried doing anything like this for other scenarios such as OpenWhisk or Google Cloud Functions.
My thinking is very much that development will move towards more web based coding over time, so I think these concerns are valid.
Our IDEs will slowly move to being web based, because, let’s face it, most of the coding for this kind of thing is text, and text is one of those things that doesn’t need a massive interface.