[1] https://gist.githubusercontent.com/mpdehaan/d979252b9c69cfd1...
[1] https://gist.githubusercontent.com/mpdehaan/d979252b9c69cfd1...
* I love that I don't have to provision any resources. The fact it will scale to volume automatically is a huge win.
* Lambda was a treat to work with. We used it with Python. Both the web console and API interface worked great for us.
* I was able to get Lambda development working end-to-end with a Makefile and the AWS CLI.
* API Gateway was a bear to work with. The concepts are unintuitive, the interface sucks, and the logging is lackluster. I found it difficult to go through the develop/test/deploy cycle on because of these issues.
* API Gateway is brand new. Brand new AWS services have bugs. We hit bugs.
* API Gateway documentation is awful.
* API Gateway had a bug where it stopped logging. If it doesn't log, it is literally impossible to debug. This hard-stopped development for 5 days while they worked on a fix.
* There's an invisible error case where your API doesn't have permissions to invoke the Lambda command. It's easy to hit and annoying.
* API Gateway doesn't support POST requests in the way you would expect. This leads to over-complicated setups for simple use cases.
* I really don't prefer the way mapping templates work in API Gateway.
Overall, our setup is humming along nicely, but it's just 2 routes. I just reviewed the Gist and I agree with many of the concerns expressed in it.
As I've been programming an Alex backend I haven't really run into the cold start issues.
I have to admit this sort of Dashboard Driven Programming is quite alien, but there are benefits.
And here is an example: https://github.com/MitocGroup/deep-microservices-todo-app
Based on our experience, currently AWS Lambda is amazing for data / content / asset management use cases. Cold start is a known issue, which I hope AWS will solve sooner rather than later, because a lot of customers are complaining about it ;)
I'm thinking of the following workflow:
1. Write/debug with TypeScript -> ES6 on Node 5
2. Compile to a single file (not sure if I can use tsc or Babel for this -- basically just inline all the imports)
3. Transpile the resulting single file to ES5
I'm not sure if it's going to work, though...
1. We write everything in ES6, following code styling from Airbnb - https://github.com/MitocGroup/javascript
2. Every Lambda is separate npm package, therefore npm is managing all the dependencies; We include node_modules folder into the .zip file and upload it to AWS
3. Using Babel, transpile ES6 to ES5 - https://github.com/MitocGroup/deep-microservices-todo-app/bl...
4. To support 0.10.x, we're requiring Babel Polyfill - https://github.com/MitocGroup/deep-microservices-todo-app/bl...
As anticipated, the performance is not the best one, but functional for some of our use cases where time is not a constrain. That's why the combination with Amazon ECS is perfect complimentary match when AWS Lambda doesn't perform well, as required by the application.
My cofounder wrote a tool to help manage Lambda deployments: https://github.com/garnaat/kappa/tree/python-refactor
[0] Well as much as we can. We're building a Slack bot right now so we still need a container running under ECS to maintain the connection to Slack.