SQS Lambda无服务器:不使用Sqs消息

时间:2019-01-16 14:58:14

标签: python amazon-web-services aws-lambda amazon-sqs serverless-framework

我使用无服务器框架部署了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+}'

1 个答案:

答案 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控制台上的队列详细信息中。

以下是免费阅读:

SLS and SQS Queues