[Flask] AWS Lambda integration module idea
mischa at mvstg.biz
mischa at mvstg.biz
Tue Nov 6 09:23:33 EST 2018
Hello all, I wanted to get feedback on a proposal for a flask extension to make writing AWS Lambda web applications and services with Flask easier.
AWS Lambdas are little zip files of code and dependencies that can be executed without any extra infrastructure and can be provided as HTTP services.
I've found that Flask is really great for making even complex lambdas, and can be nearly as easy to maintain and manage as say a Heroku application. Except they run for basically free and you don't have to worry about having hosts to run your application or scaling web servers. I wrote about my setup here https://spiegelmock.com/2018/09/06/serverless-python-web-applications-with-aws-lambda-and-flask/ <https://spiegelmock.com/2018/09/06/serverless-python-web-applications-with-aws-lambda-and-flask/>
I wrote a basic Flask service hooking into AWS SSM Parameter Store to provide encrypted secrets from AWS to the application, using aws-wsgi (https://pypi.org/project/aws-lambda-wsgi/ <https://pypi.org/project/aws-lambda-wsgi/>) to bridge lambda http proxy requests and responses with WSGI, and a small bit of tooling to vendor the application dependencies because they need to be shipped in the zip bundle. Code demonstrating all of this can be found here - https://github.com/revmischa/qanda/ <https://github.com/revmischa/qanda/>.
Local running and testing is handled by AWS SAM Local (https://github.com/awslabs/aws-sam-cli <https://github.com/awslabs/aws-sam-cli>). It uses flask-apispec with marshmallow to make serialization and swagger generation effortless.
The project I made with integrating flask and lambda is in my opinion quite smooth and makes writing a serverless Flask application as straightforward as any other app. What I want to do now is find a way to make this pattern reusable for myself and others, but it's not so clear to me how to approach this. I think the combination is a very powerful and useful one but I realized I could use some help in designing something opinionated yet reusable with the goal of making a new Flask-based lambda web service as fast and painless as possible.
I took a crack at beginning to do this with https://github.com/revmischa/flask-serverless <https://github.com/revmischa/flask-serverless> but I'm open to different ideas. What I'd like is provide configuration via AWS SSM or lambda config vars, aws-wsgi bridge, a way to bundle dependencies along with the application, CORS, marshmallow, and apispec all in a neat little starter kit to make it possible to create little flask webserverlesses with minimal setup or copy/pasting.
There do exist some third-party projects like Zappa and Serverless that provide some of these pieces, but I am trying to see how far I can get with Flask and AWS' own tooling.
Thanks for your input!
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Flask