我使用无服务器框架部署了Python Post API lambda。
代码详情如下:
app.py
pub did not update .packages file (pubspec.yaml file has a newer timestamp)
serverless.yml
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/process', methods=['POST'])
def process():
content = request.json
print content
return jsonify(content)
if __name__ == "__main__":
app.run()
我将SQS配置为触发lambda。我发送了一个SQS消息,lambda被触发了(我从CloudWatch中检查了它),但是SQS消息一直处于运行状态。看来Lambda无法使用SQS。
任何建议都值得赞赏
****更新*****
仔细检查CloudWatch之后,我发现了一些例外情况
service: my-service
plugins:
- serverless-python-requirements
- serverless-wsgi
custom:
wsgi:
app: app.app
packRequirements: false
pythonRequirements:
dockerizePip: false
package:
exclude:
- node_modules/**
- venv/**
provider:
name: aws
runtime: python2.7
stage: dev
region: eu-west-1
functions:
app:
handler: wsgi.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
答案 0 :(得分:0)
查看您的日志,似乎Flask的WSGI期望您所接收的有效负载中有一个headers
节点,如果您的事件是HTTP事件,该节点就会在那里。当您直接连接两个AWS服务时,情况并非如此。每个服务的event
对象将不同。由于您不处理HTTP请求,因此建议您从此lambda中删除Flask。
您的代码将如下所示:
import json
def process(event,context):
content = request.json
print(event)
return json.dumps(content,ensure_ascii=False)
service: my-service
plugins:
- serverless-python-requirements
package:
exclude:
- node_modules/**
- venv/**
provider:
name: aws
runtime: python2.7
stage: dev
region: eu-west-1
functions:
app:
handler: app.process
events:
- sqs:
arn: arn:partition:service:region:account-id:resource-id
batchSize: 1
您的SQS队列ARN显示在AWS控制台上的队列详细信息中。
以下是免费阅读: