【发布时间】:2023-02-17 05:14:46
【问题描述】:
我的 SQS FIFO 触发了 lambda 函数。 SQS 发送了 4 条消息,但 lambda 调用了两次。并发数是“未预留账户并发数 & 1000”。会出什么问题?
【问题讨论】:
-
单个函数调用可以处理来自队列的多于 1 个消息。
标签: amazon-web-services aws-lambda amazon-sqs aws-sqs-fifo
我的 SQS FIFO 触发了 lambda 函数。 SQS 发送了 4 条消息,但 lambda 调用了两次。并发数是“未预留账户并发数 & 1000”。会出什么问题?
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-sqs aws-sqs-fifo
AWS Lambda 函数可以通过 event 中的多个 Record 调用。
例如,在 Python 中,您将像这样处理事件:
def lambda_handler(event, context):
for record in event['Records']:
message = record['body']
print("From SQS: " + message)
传递给 Lambda 函数的最大消息数可以使用批量大小触发器中的参数:
【讨论】:
print(event)放在函数的开头了吗?它应该打印event的全部内容,显示是否有多条记录。我添加了触发器配置的屏幕截图,您可以在其中设置最大批量大小。如果您将其设置为 1,则每次调用时只会将一条 SQS 消息传递给 Lambda 函数。
print() 语句都将存储在 CloudWatch Logs 中。确保分配给您的 Lambda 函数的 IAM 角色已分配 AWSLambdaBasicExecutionRole,以便它有权将日志写入 CloudWatch Logs。见:AWS Lambda execution role - AWS Lambda