【问题标题】:SQS to AWS Lambda Function with AWS Chalice and BOTO3使用 AWS Chalice 和 BOTO3 的 SQS 到 AWS Lambda 函数
【发布时间】:2021-06-18 12:31:43
【问题描述】:
  • 我正在使用 AWS SQS 存储来自外部服务器的信息,然后将其发送到 Lambda 函数以对其进行处理并将信息出列。

  • 我发送的信息是 JSON 格式,被用作 python 字典。

def lambda_handler(event, context):

    for record in event['Records']:
        messageHandler(record)

    return {
        'statusCode': 200,
        'body': json.dumps('Batch Processed')
}
  • 假设messageHandler 的代码正在工作并且正确实施,我如何从队列中批量捕获消息。这一切都由 AWS Chalice 部署,无需使用 CLI。

我现在完全不了解,不知道为什么在我部署它时它不起作用,但是当我通过 SQS 发送/接收消息功能在 AWS 控制台中触发正常的 Lambda 函数时它起作用。据我所知,触发器设置正确,应该没有问题。

如果您有任何问题,请告诉我。

【问题讨论】:

    标签: python aws-lambda amazon-sqs


    【解决方案1】:

    您正在处理的事件将如下所示:

    {
        "Records": [
            {
                "messageId": "11d6ee51-4cc7-4302-9e22-7cd8afdaadf5",
                "receiptHandle": "AQEBBX8nesZEXmkhsmZeyIE8iQAMig7qw...",
                "body": "Test message.",
                "attributes": {
                    "ApproximateReceiveCount": "1",
                    "SentTimestamp": "1573251510774",
                    "SequenceNumber": "18849496460467696128",
                    "MessageGroupId": "1",
                    "SenderId": "AIDAIO23YVJENQZJOL4VO",
                    "MessageDeduplicationId": "1",
                    "ApproximateFirstReceiveTimestamp": "1573251510774"
                },
                "messageAttributes": {},
                "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
                "eventSource": "aws:sqs",
                "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:fifo.fifo",
                "awsRegion": "us-east-2"
            }
        ]
    }
    

    "body" 是您的 json 编码消息。你会希望你的消息处理函数做这样的事情:

    def message_handler(event):
        message = json.loads(event["body"])
        # do stuff...
    

    如果 lambda 被用作 sqs 的事件目标,则 lambda 的返回值毫无意义。

    【讨论】:

    • 谢谢,我必须尝试一下,我已经从 SQS 转移到项目的其他区域,但可能很快会重新访问该部分,届时我将尝试实施。