【发布时间】:2022-07-13 02:29:50
【问题描述】:
我目前有一个配置为启用 EventBridge 事件的 S3 存储桶,并且我有一个 EventBridge 规则,该规则触发一个阶梯函数,该阶梯函数又触发一个 lambda。
我想将我在 lambda 中获得的输入映射到 AWS Java SDK (com.amazonaws:aws-lambda-java-events) 中的事件类之一,但我运气不佳。
这是我的 lambda 在我的 Java 代码中的签名:
public class DeviceAssociationLambda implements RequestHandler<S3Event, OutputObject> {
@Override
public OutputObject handleRequest(S3Event input, Context context) {
当我的 step 函数调用此 lambda 时,它会发送如下所示的有效负载:
{
"version": "0",
"id": "e31fcb40-aa08-11ec-b909-0242ac120002",
"detail-type": "Object Created",
"source": "aws.s3",
"account": "123456789098",
"time": "2022-03-22T17:07:44Z",
"region": "eu-central-1",
"resources": [
"arn:aws:s3:::my-test-bucket"
],
"detail": {
"version": "0",
"bucket": {
"name": "my-test-bucket"
},
"object": {
"key": "foo/bar.json",
"size": 685,
"etag": "af87c63487cc2ff6323e67ddd234f44",
"sequencer": "00827F2232287F2343"
},
"request-id": "LK63256WW7E66YCC4",
"requester": "123456789098",
"source-ip-address": "123.123.123.123",
"reason": "PutObject"
}
}
尝试调试后,我发现我的 lambda 中的 S3Event 参数始终为空。这可能是因为它期望输入 JSON 格式不同(可能是:https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-content-structure.html)
所以,我的问题是,Java SDK 中是否有任何标准事件对象可以处理我从 EventBridge 获得的 JSON?当然,我可以在 step 函数中对 JSON 进行一些操作,例如将 lambda 输入限制为“detail”块(如果有帮助的话)。
或者我是否只需要创建自己的输入类来映射到我作为输入获得的这个 JSON 结构?
【问题讨论】:
标签: java amazon-s3 aws-lambda aws-java-sdk aws-event-bridge