如何使用 aws cli 调用异步 Lambda 函数

How to invoke asynchronous Lambda function using aws cli

我创建了一个异步 lambda 函数,当我在 aws 控制台上测试它时 运行 没问题。完成执行需要 6-7 分钟。但是当我从本地 aws cli 调用相同的函数时,它显示以下输出。

Read timeout on endpoint URL: "https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/mandrill/invocations"

知道出了什么问题,我该如何解决。我用来从 cli 调用此函数的命令如下,

aws lambda invoke --invocation-type RequestResponse --function-name mandrill --region us-east-1 --payload "{ \"domain\": \"faisal999.wombang.com\" }" --cli-binary-format raw-in-base64-out response.json

invoke a function asynchronously,将 InvocationType 设置为 Event。

aws lambda invoke --invocation-type Event --function-name mandrill --region us-east-1 --payload "{ \"domain\": \"faisal999.wombang.com\" }" --cli-binary-format raw-in-base64-out response.json

此外,请考虑以下几点:

对于异步调用,Lambda 将事件添加到队列中,然后再将它们发送到您的函数。如果您的函数没有足够的容量跟上队列,事件可能会丢失。有时,您的函数可能会多次收到同一事件,即使没有发生错误。要保留未处理的事件,请使用死信队列配置您的函数。

在你的命令中你有 --invocation-type RequestResponse

来自 AWS docs:

RequestResponse (default) - Invoke the function synchronously. Keep the connection open until the function returns a response or times out. The API response includes the function response and additional data.

您可能想尝试使用 --invocation-type Event

Event - Invoke the function asynchronously. Send events that fail multiple times to the function's dead-letter queue (if it's configured). The API response only includes a status code.