当您异步调用函数时,Lambda 会将事件发送到队列。一个单独的进程会从队列中读取事件并运行您的函数。将事件添加到队列后,Lambda 将返回成功响应,而不返回其余信息。要异步调用函数,请将调用类型参数设置为 Event
。html
输出文件 (response.json
) 不包含任何信息,但运行此命令时仍会建立该文件。若是 Lambda 没法将事件添加到队列,则错误消息将显示在命令输出中。json
Lambda 管理函数的异步调用队列,并尝试自动重试失败的事件。若是函数返回错误,Lambda 会尝试再运行两次,前两次尝试之间等待一分钟,第二次与第三次之间等待两分钟。函数错误包括函数代码返回的错误,以及函数运行时返回的错误,例如超时。若是全部 3 次尝试都失败,Lambda 会将事件发送到死信队列(若是已配置)。api
若是该函数没有足够的并发可用于处理全部事件,则其余请求将受到限制。对于限制错误 (429) 和系统错误(500 系列),Lambda 会将事件返回到队列并尝试再次运行该函数长达 6 小时。重试间隔从第一次尝试后的 1 秒呈指数级增长到最多 5 分钟,但若是队列已备份,则可能会更长。Lambda 还下降了从队列中读取事件的速率,而且可能没法读取队列中进一步返回的事件。事件能够位于队列中的最长时间是 4 天。并发
即便您的函数没有返回错误,它也可能屡次从 Lambda 接收相同的事件,由于队列自己具备最终一致性。若是函数没法跟上传入事件,则也可能从队列中删除事件而不将其发送到函数。确保您的函数代码正常处理重复事件,而且您有足够的并发可用于处理全部调用。异步
当全部三次尝试处理异步调用失败后,Lambda 能够将事件发送到 Amazon SQS 队列或 Amazon SNS 主题。使用死信队列配置您的函数,以保存这些事件供进一步处理。async
若是您没有队列或主题,请建立一个队列或主题。选择与您的使用案例匹配的目标类型。ide
Amazon SQS 队列 – 队列会保存失败的事件,直到它们被检索为止。您能够手动检索事件,也能够配置 Lambda 以从队列中读取并调用函数。函数
在 Amazon SQS 控制台中,建立一个队列。工具
Amazon SNS 主题 – 主题将失败的事件中继到一个或多个目标。您能够配置主题以将事件发送到电子邮件地址、Lambda 函数或 HTTP 终端节点。开发工具
在 Amazon SNS 控制台中,建立一个主题。
要将事件发送到队列或主题,您的函数须要其余权限。添加具备函数执行角色所需权限的策略。
Amazon SQS – sqs:SendMessage
Amazon SNS – sns:Publish
建立目标并更新函数的执行角色后,将死信队列添加到函数中。您能够配置多个函数,以便将事件发送到同一目标。
配置死信队列
打开 Lambda 控制台 函数页面。
选择函数。
在 Debugging and error handling (调试和错误处理) 下,将 DLQ 资源设置为 Amazon SQS 或 Amazon SNS。
选择目标队列或主题。
选择 Save。
要经过 AWS CLI 配置死信队列,请使用 update-function-configuration
命令。
$aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=
aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-2:123456789012:my-topic
arn:aws:sns:us-east-2:123456789012:my-topic
arn:aws:sns:us-east-2:123456789012:my-topic
Lambda 按原样将事件发送到死信队列,并在属性中包含其余信息。您可使用此信息来标识函数返回的错误,或将事件与日志或 AWS X-Ray 跟踪相关联。
DLQ 消息属性
RequestID(字符串)– 调用请求的 ID。请求 ID 显示在函很多天志中。您还可使用 X-Ray 开发工具包在跟踪中的属性上记录请求 ID,而后您能够在 X-Ray 控制台中按请求 ID 进行搜索。有关示例,请参阅错误处理器示例。
ErrorCode(数字)– HTTP 状态代码。
ErrorMessage(字符串)– 错误消息的第一个 1 KB 文本块。
若是 Lambda 没法向死信队列发送消息,则会删除该事件并发出 DeadLetterErrors 指标。之因此发生这种状况,多是因为缺乏权限,或者消息的总大小超过目标队列或主题的限制。例如,若是正文接近 256 KB 的 Amazon SNS 通知触发致使错误的功能,则 Amazon SNS 添加的附加事件数据与 Lambda 添加的属性相结合,可能会致使消息超过 DLQ 中容许的最大大小。
若是您使用 Amazon SQS 做为事件源,请在 Amazon SQS 队列自己上而不是 Lambda 函数上配置 DLQ。