当前位置: 首页 > 知识库问答 >
问题:

目标仅在通过AWS CLI调用Lambda时有效

史懿轩
2023-03-14

我有一个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控制台中的Test按钮时,没有消息排队到任何一个目标队列。编辑:这是预期行为https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way

为什么这3次调用之间的目标行为会有所不同?我已将此测试的重试尝试设置为0。

共有2个答案

易瀚漠
2023-03-14

Lambda目标仅为异步调用触发。在Lambda非代理(自定义)集成中,默认情况下同步调用后端Lambda函数。

通过将“事件”指定为Lambda调用类型,可以配置Lambda函数以异步调用Lambda非代理集成。具体操作如下:

在集成请求中,添加一个静态值为“Event”的X-Amz-Invocation-Type头。

从这里引用。

毛弘博
2023-03-14

似乎有一组有效的{trigger,destination}对,{API Gateway,SQS}不是其中之一。能够从给定触发器调用lambda不足以将事件传递到目标。AWS控制台不强制执行这些配对或发出警告。

我引用了以下图表:https://www.trek10.com/blog/lambda-destinations-what-we-learned-the-hard-way/

我在lambda中添加了一个S3触发器,并且S3事件毫无问题地发布到目标SQS队列。

 类似资料:
  • 我已经使用配置了一个CloudWatch规则以在给定时间运行,但Lambda只是有时被调用。我已经确保Lambda执行角色具有适当的权限,有时CloudWatch规则会正确运行,调用我的Lambda函数。 例如,我以编程方式创建了一个规则,启用了它,并使用Python中的boto3客户端添加了一个目标,然后当角色执行时,它会执行,并在CloudWatch度量中显示“调用错误”。我采用了同样的规则,

  • 我正在从恶作剧者迁移到无头铬的过程中。 有趣的是,当在聚焦元素后放置时,规范也通过了无头铬! 我在这里能做什么?我在正确的轨道上?我应该尝试https://github.com/twalpole/appariation驱动程序吗?

  • 我有一个对象列表,比如。我想根据使用Java 8的一些参数过滤这个列表。但如果参数为,则抛出。如何过滤掉空值? 当前代码如下 如果返回,则抛出。

  • 好了,我说完了。请有人帮帮我:( 我不知道js和lambda是怎么工作的 null 最令人困惑的是!这个b给我这个测试结果: 运行1: DynamoDb是空的,这里我们看不到DynamoDb.BatchWriteItem结果的日志。

  • 我有一个这样的设置: 浏览器->API网关->lambda:87 ms 如何快速调用Lambda函数?

  • 是否可以通过http请求(GET或POST)直接调用AWS Lambda函数?如果没有,是否有通过SNS或S3的解决方案?因为我想不出一个。。。 具体来说,我想使用 JSON 创建一个小的 API