python - SQS Lambda 无服务器:Sqs 消息未被消费
问题描述
我使用无服务器框架部署了一个 Python Post API lambda。
代码详情如下:
应用程序.py
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()
无服务器.yml
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+}'
我将 SQS 配置为触发 lambda。我发送了一条 SQS 消息,触发了 lambda(我从 CloudWatch 中检查了它),但 SQS 消息被卡住了。似乎 SQS 不能被 lambda 消耗。
任何建议表示赞赏
****更新*****
仔细查看CloudWatch后发现有一些异常
u'headers': KeyError
Traceback (most recent call last):
File "/var/task/wsgi.py", line 100, in handler
return serverless_wsgi.handle_request(wsgi_app, event, context)
File "/var/task/serverless_wsgi.py", line 73, in handle_request
headers = Headers(event[u"headers"])
KeyError: u'headers'
解决方案
查看您的日志,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 控制台上的队列详细信息中。
这是免费阅读:
推荐阅读
- reactjs - react props 出错:props.onAnswer 不是函数
- angular - 如何从文件中读取标签名称
- http - 如何知道http重定向+表单POST成功
- git - 有什么方法可以恢复所有因从 github 拉取远程存储库而在同一本地目录中删除的文件?
- javascript - jquery datatable 修复了带有子/子行问题的第一列
- c# - Session.SetString 方法在 ASP.NET Core 3.1 中引发异常“IFeatureCollection 已被释放。对象名称:'Collection'。”
- amazon-web-services - Kubectl:使用 TCP 目标 https 添加运行状况检查,不要在 AWS 的 ELB 上终止 SSL
- entity-framework - 如何在图片之间创建具有幻灯片动画功能的 UI?
- java - Spring Boot Querydsl:排序 - 有时不适用于特定实体属性
- python - 获取“列表索引超出范围”错误