AWS EventBridge 事件触发使用 LAMBDA_PROXY 和 API 网关的 lambda 函数

问题描述 投票:0回答:1

我有一个 Java 中的 AWS Lambda 函数,它使用 APIGatewayProxyRequestEvent (LAMBDA_PROXY) 从 API 网关获取输入。对于通过 API 网关进行 API 调用,我可以毫无问题地获取并打印输入正文。

现在我想要一个 EventBridge 计划事件,每 5 分钟触发一次 Lambda 函数。但是,当我在下面的代码中打印它时,我无法获取事件有效负载,因为它显示 null

Lambda 函数:

@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input,
        Context context) {

    logger.info("RawBody: {}", input.getBody());
    // RawBody: null

EventBridge 事件负载:

{"key": "value"}

知道如何在 Lambda 函数中从 EventBridge 获取事件负载吗?

java amazon-web-services aws-lambda aws-api-gateway aws-event-bridge
1个回答
0
投票

Lambda 函数利用序列化将 JSON 负载转换为指定的 JAVA 类类型。根据您的 lambda 函数实现,所有 JSON 有效负载都将转换为

APIGatewayProxyRequestEvent
类型。因此,由于 EB 负载与
APIGatewayProxyRequestEvent
类型不匹配,因此您在从 EB 调度程序触发 lambda 函数时收到了
null
值。

要从 API Gateway 和 EB 触发上述 lambda 函数,您可以按照以下任一步骤操作:

  • 如果您计划模拟来自 EB 调度程序的 API 请求,请确保修改您的负载以表示

    APIGatewayProxyRequestEvent
    。您可以在this文档中找到API网关代理事件的格式详细信息。

  • 或者,您可以利用 EB 调用 API 网关端点,而不是直接调用 lambda 函数。通过这样做,您可以将有效负载直接传递到 API 端点,API 网关将在内部调用 lambda 函数。有关从 EB 触发 API 网关端点的更多信息,请参阅this文档。

  • 但是,如果 EB 调度程序的用例与 API 网关端点的用途完全不同,我强烈建议使用单独的 lambda 函数来处理 EB 调度程序事件。

  • 如果您只是在做一项实验,并且想要创建一个接受多个事件触发器的 lambda 函数,那么请查看 this SO 答案。

© www.soinside.com 2019 - 2024. All rights reserved.