【问题标题】:Where can you change the batch size for an SQS queue that triggers an AWS Lambda function?您可以在哪里更改触发 AWS Lambda 函数的 SQS 队列的批量大小?
【发布时间】:2020-11-18 06:10:26
【问题描述】:

我本可以发誓,有一种简单的方法可以更改配置为 Lambda 触发器的 SQS 队列的批量大小,但截至 2020 年 7 月,我再也找不到发生这种情况的地方。这可能与目前在 AWS 上宣传的“新 SQS 控制台体验”有关。

我可以看到我的队列的当前批量大小(屏幕截图),但数字不可编辑。我也没有在 SQS 界面中看到任何与批量大小相关的内容。我当前的 IAM 凭证可能无法更改批量大小并且对我隐藏。有谁知道这个值可以在哪里更改?

【问题讨论】:

  • 这很有趣,从来没有注意到新用户界面的这个限制!我什至在最后对其进行了测试并尝试先禁用它,希望“修复”按钮可以让我编辑它,但它一直是灰色的……我建议暂时使用 AWS CLI 来编辑触发器.
  • 如果您已经将 SQS 触发器添加到 lambda,请删除并重新添加触发器。您可以在重新添加触发器时更改批量大小

标签: amazon-web-services aws-lambda amazon-sqs


【解决方案1】:

此限制与 Amazon SQS 无关 控制台。

这将与 AWS Lambda 相关,因为 Lambda 服务负责轮询 SQS 队列并指定要检索的批处理大小。

您说得对,Lambda 控制台中没有编辑批量大小的功能。

来自update-event-source-mapping — AWS CLI Command Reference,这是一个可以更新批处理大小的 AWS CLI 命令:

aws lambda update-event-source-mapping \
    --uuid  "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --batch-size 8

输出:

{
    "UUID": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
    "StateTransitionReason": "USER_INITIATED",
    "LastModified": 1569284520.333,
    "BatchSize": 8,
    "State": "Updating",
    "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
    "EventSourceArn": "arn:aws:sqs:us-west-2:123456789012:mySQSqueue"
}

或者,只需在 Lambda 控制台中删除触发器并创建一个新触发器。

【讨论】:

  • 谢谢!要知道 uuid,请使用 aws lambda list-event-source-mappings --function-name <functionName>
  • 如果您使用别名:aws lambda list-event-source-mappings --function-name <functionName>:<alias>
【解决方案2】:

SQS 也不例外。 DynamoDB 和 Kinesis 流也是如此。我认为原因是 所有三个 服务都通过 event source mappings 与 lambda 一起工作。没有其他东西在使用映射。

但是,通过控制台更新event source mappings 也是不可能的。您可以为此使用 CLI 或 SDK,但这也需要获取映射的 UUID 以进行修改。遗憾的是控制台中也没有提供 UUID

要在 CLI 中使用,您必须分两步

1 获取 UUID

aws lambda list-event-source-mappings --query 'EventSourceMappings[].[UUID, EventSourceArn]' --output table
-------------------------------------------------------------------------------------------------------------------------------
|                                                   ListEventSourceMappings                                                   |
+---------------------------------------+-------------------------------------------------------------------------------------+
|  5ab44863-82c2-4acc-b9dc-b14ad368effa |  arn:aws:kinesis:us-east-1:xxxxx:stream/kstream                              |
|  7479947c-bde5-4041-a438-5eb08f350505 |  arn:aws:dynamodb:us-east-1:xxxx:table/test/stream/2020-07-28T23:13:41.006  |
|  40040139-32fb-4297-b094-3f08368c980c |  arn:aws:sqs:us-east-1:xxxxx:Messages                                        |
|  a2b22aa6-f37a-4603-895b-3a044661ebdf |  arn:aws:sqs:us-east-1:xxx:test-queue                                      |
+---------------------------------------+-------------------------------------------------------------------------------------+

2。更新映射(例如 SQS)

aws lambda update-event-source-mapping --uuid a2b22aa6-f37a-4603-895b-3a044661ebdf --batch-size 5
{
    "UUID": "a2b22aa6-f37a-4603-895b-3a044661ebdf",
    "BatchSize": 5,
    "EventSourceArn": "arn:aws:sqs:us-east-1:xxx:test-queue",
    "FunctionArn": "arn:aws:lambda:us-east-1:xxxx:function:testsfd",
    "LastModified": 1595978738.458,
    "State": "Updating",
    "StateTransitionReason": "USER_INITIATED"
}

【讨论】:

  • 非常感谢!拯救了我的一天!
  • @user2608613 没问题。很高兴我的回答有帮助:-)
【解决方案3】:

以前不确定,但 lambda UI 现在允许您配置批量大小。

警告:您必须从 lamdba UI 而不是从 SQS UI 手动创建触发器。

文档中概述的步骤

  1. 在 Lambda 控制台上打开函数页面。
  2. 选择一个函数。
  3. 在 Designer 下,选择 Add trigger。
  4. 选择触发器类型。
  5. 配置所需选项,然后选择添加。

Configuring a queue as an event source

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2020-10-15
    • 2018-09-26
    • 2020-02-15
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多