我有一个 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 获取事件负载吗?
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 答案。