我有一个要求,即在单个时间点,同一 SQS 队列中的每个 SQS 消息应触发单独的 lambda 实例
例如,SQS 队列在给定时间有 n 条消息,那么期望是,它应该触发 n 个 lambda 实例
Message_1 --> Lambda_function_A_instance_1
Message_2 --> Lambda_function_A_instance_2
Message_n --> Lambda_function_A_instance_n
使用案例: 需要为每条消息保留单独的 lambda 函数实例,以便处理大于 10G 的数据文件。 因此每条消息都会调用同一函数的新 lamnda 实例
要将 Lambda 配置为一次仅从 SQS 读取一条消息,您需要在创建 SQS 事件源映射时将
BatchSize
参数设置为 1
。这将确保一次仅从队列中读取一条消息。
此外,您可以将
VisibilityTimeout
参数设置为大于 Lambda 函数超时值的值,以确保消息不会被多次处理。
我们在我正在从事的一个项目中也有同样的要求,我们所做的就是按照 Chaitanya 和 AWS 文档的建议将 BatchSize 参数设置为 1: https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-params
AWS 文档还提供了关于如何使用 SAM 描述它的很好的示例(这是我们在项目中使用的): https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-sqs.html