我有一个 hello-world 测试 Lambda,配置为:
- 触发:API网关
- 目的地:亚马逊 SQS。一个队列表示成功,另一个队列表示失败。
import json
def lambda_handler(event, context):
print("Received event: " + json.dumps(event))
return {
"statusCode": 200,
"body": 'success'
}
当我通过 CLI 调用 Lambda 时,消息将按预期排队到成功队列中:
aws lambda invoke --function-name event-destinations --invocation-type Event --payload '{}' response.json
但是,当我通过 API 网关调用 Lambda 时,没有消息被排队到任一目标队列。我启用了 Lambda 代理集成。 Cloudwatch 指标确认调用成功(调用计数上升,错误计数不变)。以下内容从我的 Lambda 代码中返回 200 和预期响应正文:
curl 'https://REDACTED.execute-api.us-east-1.amazonaws.com/api_trigger' \
--header 'Content-Type: application/json' \
--data-raw '{}'
同样,当我使用 Lambda 控制台中的“测试”按钮时,没有消息会排队到任一目标队列。编辑:这是预期的行为 https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way
为什么这 3 次调用的目标行为会有所不同?我已将此测试的重试次数设置为 0。
似乎有一组有效的{trigger,destination}对,而{API Gateway,SQS}不是其中之一。能够从给定触发器调用 lambda 不足以将事件传递到目标。 AWS 控制台不会强制执行这些配对或发出警告。
我参考了该图表:https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way/ https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way/
我向 lambda 添加了 S3 触发器,并且 S3 事件毫无问题地发布到目标 SQS 队列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)