嘿,伙计们,我在lambda上部署flask+serverless wsgi和serverless python需求插件并在AWS控制台上测试该功能时遇到了一些问题,我在下面得到了这个错误
不知道为什么要在本地测试中工作
Response
{
"errorMessage": "'headers'",
"errorType": "KeyError",
"stackTrace": [
" File \"/var/task/wsgi_handler.py\", line 110, in handler\n return serverless_wsgi.handle_request(wsgi_app, event, context)\n",
" File \"/var/task/serverless_wsgi.py\", line 170, in handle_request\n return handle_lambda_integration(app, event, context)\n",
" File \"/var/task/serverless_wsgi.py\", line 308, in handle_lambda_integration\n headers = Headers(event[u\"headers\"])\n"
]
}
在我面对这个问题之前,我没有发现werkzeug模块错误,所以我降级了requirements.txt,但它仍然不起作用
flask==1.0.2
werkzeug==1.0.0
这是我的handler.py。这个函数只是返回一些东西
import os
import sys
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
env = os.environ
from flask import Flask, request, Response
app = Flask(__name__)
@app.route('/toro',methods = ['POST'])
def toro():
data = {
'name': 'Toro'
}
js = json.dumps(data)
response = Response(js, status=200, mimetype='application/json')
return response
这是我的无服务器.yml
service: my-service
plugins:
- serverless-aws-documentation
- serverless-s3-deploy
- serverless-domain-manager
- serverless-plugin-warmup
- serverless-offline
- serverless-wsgi
- serverless-python-requirements
provider:
name: aws
runtime: python3.7
stage: dev
region: ap-southeast-1
versionFunctions: false
profile: default
memorySize: 1024
timeout: 30
logRetentionInDays: 14
logs:
restApi: true
environment:
NODE_ENV: ${self:provider.stage}
vpc:
securityGroupIds:
- sg-xxxxxxxxxxxxx
subnetIds:
- subnet-xxxxxxxxxxx
iamRoleStatements:
- Effect: "Allow"
Action:
- "secretsmanager:GetSecretValue"
Resource:
- "*"
- Effect: "Allow"
Action:
- "s3:PutObject"
- "s3:PutObjectAcl"
- "s3:GetObject"
- "s3:ListBucket"
- "s3:DeleteObject"
Resource:
- "*"
- Effect: "Allow"
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
- "ec2:CreateNetworkInterface"
- "ec2:DescribeNetworkInterfaces"
- "ec2:DeleteNetworkInterface"
- "ec2:AssignPrivateIpAddresses"
- "ec2:UnassignPrivateIpAddresses"
Resource:
- "*"
- Effect: "Allow"
Action:
- "elasticfilesystem:ClientMount"
- "elasticfilesystem:ClientRootAccess"
- "elasticfilesystem:ClientWrite"
- "elasticfilesystem:DescribeMountTargets"
Resource:
- "*"
functions:
toro:
handler: wsgi_handler.handler
reservedConcurrency: 10
events:
- http:
path: /toro
method: post
cors:
origin: "*"
custom:
wsgi:
app: handler.app
packRequirements: false
pythonRequirements:
dockerizePip: 'non-linux'
有人能帮我吗
您还必须传递标题道具。如果您使用应用程序邮递员发出请求,它将自动传递该标题道具。否则,您必须显式地传递它
下面是一个可以传递的有效json示例
相关问题 更多 >
编程相关推荐