簡體   English   中英

AWS API GW + Lambda Flask

[英]AWS API GW + Lambda Flask

我正在嘗試使用 Flask 設置使用 API Gateway 和 Lambda 的應用程序。 當我使用一個簡單的 lambda 函數返回一個字符串時,一切正常。

def lambda_handler(event, context):
    return "Hello world" 

但是,當我嘗試通過 flask-lambda 運行同樣的事情時,我收到以下代碼錯誤:

from flask_lambda import FlaskLambda

app = FlaskLambda(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    return "Hello world" 


if __name__ == '__main__':
    app.run(debug=True)

這是我通過瀏覽器得到的錯誤:

{"errorMessage": "'wsgi.url_scheme'", "errorType": "KeyError", "stackTrace": ["  File \"/var/task/flask_lambda.py\", line 97, in __call__\n    return super(FlaskLambda, self).__call__(event, context)\n", "  File \"/var/task/flask/app.py\", line 2088, in __call__\n    return self.wsgi_app(environ, start_response)\n", "  File \"/var/task/flask/app.py\", line 2065, in wsgi_app\n    ctx = self.request_context(environ)\n", "  File \"/var/task/flask/app.py\", line 1982, in request_context\n    return RequestContext(self, environ)\n", "  File \"/var/task/flask/ctx.py\", line 309, in __init__\n    self.url_adapter = app.create_url_adapter(self.request)\n", "  File \"/var/task/flask/app.py\", line 1774, in create_url_adapter\n    return self.url_map.bind_to_environ(\n", "  File \"/var/task/werkzeug/routing.py\", line 1651, in bind_to_environ\n    wsgi_server_name = get_host(environ).lower()\n", "  File \"/var/task/werkzeug/wsgi.py\", line 113, in get_host\n    environ[\"wsgi.url_scheme\"],\n"]}

我不知道我是否需要將 env 變量添加到 lambda 或什么。 我添加了以下環境變量進行測試,只是往牆上扔東西:

Environment:
        Variables: 
          TABLE_NAME: blah-table
          REGION_NAME: !Ref AWS::Region
          SERVER_NAME: !Sub 'xxxxxxxxx.execute-api.${AWS::Region}.amazonaws.com'
          SERVER_PORT: 443
          HTTP_HOST: !Sub 'xxxxxxxx.execute-api.${AWS::Region}.amazonaws.com'
          WSGI_SERVER_NAME: !Sub 'xxxxxxxx.execute-api.${AWS::Region}.amazonaws.com'

任何朝着正確方向的推動都非常感謝。

我已經放棄使用flask-lambda,而是修改了awsgi https://github.com/slank/awsgi包以使用有效負載版本2.0 事件格式。

來自https://github.com/slank/awsgi

import awsgi
from flask import (
    Flask,
    jsonify,
)

app = Flask(__name__)


@app.route('/')
def index():
    return jsonify(status=200, message='OK')


def lambda_handler(event, context):
    return awsgi.response(app, event, context, base64_content_types={"image/png"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM