简体   繁体   English

AWS Lambda(Python + Flask)基本功能无法使用 API 网关

[英]AWS Lambda (Python + Flask) basic functionality not working using API Gateway

I am doing a POC on API Gateway integration with AWS Lambda using Flask, to build a simple S3 upload function.我正在使用 Flask 在 API 网关与 AWS Lambda 集成上进行 POC,以构建简单的 S3 上传 ZC1C425Z4574E68384F1 However when I write a simple Hello World function using Flask it's failing with below error.但是,当我使用 Flask 编写一个简单的 Hello World function 时,它失败并出现以下错误。 The API gateway has proxy lambda enabled. API 网关启用了代理 lambda。 However I am not sure why its not passing the event.但是我不确定为什么它没有通过这个事件。

#Lambda Handler is fl.app
from flask import Flask
app = Flask(__name__)

@app.route("/resourcetest")
def hello():
    return "Hello World!"

Response
Response
{
  "errorMessage": "'SERVER_NAME'",
  "errorType": "KeyError",
  "stackTrace": [
    [
      "/var/task/flask/app.py",
      2464,
      "__call__",
      "return self.wsgi_app(environ, start_response)"
    ],
    [
      "/var/task/flask/app.py",
      2442,
      "wsgi_app",
      "ctx = self.request_context(environ)"
    ],
    [
      "/var/task/flask/app.py",
      2359,
      "request_context",
      "return RequestContext(self, environ)"
    ],
    [
      "/var/task/flask/ctx.py",
      292,
      "__init__",
      "self.url_adapter = app.create_url_adapter(self.request)"
    ],
    [
      "/var/task/flask/app.py",
      2174,
      "create_url_adapter",
      "subdomain=subdomain,"
    ],
    [
      "/var/task/werkzeug/routing.py",
      1594,
      "bind_to_environ",
      "wsgi_server_name = get_host(environ).lower()"
    ],
    [
      "/var/task/werkzeug/wsgi.py",
      168,
      "get_host",
      "rv = environ[\"SERVER_NAME\"]"
    ]
  ]
}

Function Logs Function 日志

START RequestId: 5c0f26d9-00ac-4901-b224-c56c23fdff39 Version: $LATEST
'SERVER_NAME': KeyError
Traceback (most recent call last):
  File "/var/task/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/var/task/flask/app.py", line 2442, in wsgi_app
    ctx = self.request_context(environ)
  File "/var/task/flask/app.py", line 2359, in request_context
    return RequestContext(self, environ)
  File "/var/task/flask/ctx.py", line 292, in __init__
    self.url_adapter = app.create_url_adapter(self.request)
  File "/var/task/flask/app.py", line 2174, in create_url_adapter
    subdomain=subdomain,
  File "/var/task/werkzeug/routing.py", line 1594, in bind_to_environ
    wsgi_server_name = get_host(environ).lower()
  File "/var/task/werkzeug/wsgi.py", line 168, in get_host
    rv = environ["SERVER_NAME"]
KeyError: 'SERVER_NAME'

END RequestId: 5c0f26d9-00ac-4901-b224-c56c23fdff39
REPORT RequestId: 5c0f26d9-00ac-4901-b224-c56c23fdff39 Duration: 6.05 ms Billed Duration: 7 ms Memory Size: 128 MB Max Memory Used: 53 MB Init Duration: 292.92 ms

Request ID
5c0f26d9-00ac-4901-b224-c56c23fdff39

Looking at error logs you should set the SERVER_NAME value in your code by adding it as a environment variable or insert these details in your handler code to fix the issue查看错误日志,您应该在代码中设置 SERVER_NAME 值,方法是将其添加为环境变量,或者在处理程序代码中插入这些详细信息以解决问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM