AWS Lambda函数为了更好的结合API GateWay进行接口的调用有以下几种方式:
方式一:
创建lambda函数后,继续创建api gateway, 然后在lambda函数上选择触发器,绑定api gatwway, 这样会把api的请求转发到lambad函数中,存在不好的一点是,需要在lambda函数中根据context中的path属性出来不同请求路径的url,并做相对应的出来,并且还需要自己打包相对应的环境和依赖,及其不友好。
方式二: 通过第三方集成包,python有zappa、chilace可以很好的与Flask和Django结合,通过命令行可以简单的部署并集成api
https://github.com/zappa/Zappa/blob/master/setup.py
https://aws.github.io/chalice/
from zappa.asynchronous import task, get_async_response
from flask import Flask, make_response, abort, url_for, redirect, request, jsonify
from time import sleep
app = Flask(__name__)
@app.route('/payload')
def payload():
delay = request.args.get('delay', 60)
x = longrunner(delay)
return redirect(url_for('response', response_id=x.response_id))
@app.route('/async-response/<response_id>')
def response(response_id):
response = get_async_response(response_id)
if response is None:
abort(404)
if response['status'] == 'complete':
return jsonify(response['response'])
sleep(5)
return "Not yet ready. Redirecting.", 302, {
'Content-Type': 'text/plain; charset=utf-8',
'Location': url_for('response', response_id=response_id, backoff=5),
'X-redirect-reason': "Not yet ready.",
}
@task(capture_response=True)
def longrunner(delay):
sleep(float(delay))
return {'MESSAGE': "It took {} seconds to generate this.".format(delay)}