如何让我的 dynamodb lambda 函数检查用户的身份?



我已经使用此文档设置了一个dynamodb lambda触发器。当dynamodb表更新时,该函数成功触发,我可以很好地查看输出。

我想找到更新dynamodb表的用户的身份,但这些信息似乎不包括在事件中。我怎样才能做到这一点?

事件如下:

{
"Records": [
{
"eventID": "1725dad5b286b22b02cffc28e5006437",
"eventName": "INSERT",
"eventVersion": "1.1",
"eventSource": "aws:dynamodb",
"awsRegion": "us-west-2",
"dynamodb": {
"ApproximateCreationDateTime": 1607759729,
"Keys": {
"receiver": {
"S": "c2217b13-12e8-42a4-a1ab-627f764493c9"
},
"sender": {
"S": "6fad5bc8-a389-4d73-b171-e709d5d8bdd8"
}
},
"NewImage": {
"createdAt": {
"S": "2020-12-12T07:55:29.105Z"
},
"receiver": {
"S": "c2217b13-12e8-42a4-a1ab-627f764493c9"
},
"sender": {
"S": "6fad5bc8-a389-4d73-b171-e709d5d8bdd8"
},
"__typename": {
"S": "FriendRequest"
},
"updatedAt": {
"S": "2020-12-12T07:55:29.105Z"
}
},
"SequenceNumber": "4092400000000003379896405",
"SizeBytes": 261,
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"eventSourceARN": "arn:aws:dynamodb:us-west-2:213277979580:table/FriendRequest-rmzuppsajfhzlfgjehczargowa-apisecure/stream/2020-12-11T07:48:02.462"
}
]

}

DynamoDB不提供编写记录的用户的ID。实现这一点的唯一方法是首先将用户id作为DynamoDB项目的一部分。但这意味着您的应用程序需要识别用户并编写该属性。

但是,如果使用AWS控制台插入项目,这显然是行不通的。在这种情况下,您的用户需要手动插入自己的ID(或其他用户的ID(。

我们有一个类似的场景,我们希望跟踪谁(用户(或什么(服务(对记录进行了最后一次更新。首先我们的拱门看起来像:

User/Service changes -> API Lambda -> DynamoDB Stream -> Lambda (normalizes stream data) -> Service Event SNS Topic

所有关心更改的服务或功能都附加到SNS主题,而不是流。

插入/更新可以很好地工作,我们有一个内部使用字段,我们在其中保存这些数据,它不会通过CRUD API返回。类似于:updated_by: app:service:region:user/1

当我们得到记录时,我们知道这个项目是由id为1的用户更新的。因此,当我们创建sns主题时,我们添加了一个具有此值的消息属性。

删除有点棘手,因为你不能真正同时更新和删除一个项目。我们目前的做法是在删除时手动生成一个删除事件,因此我们不依赖流,而是异步lambda函数并传递用户/服务数据。

User/Service changes -> API Lambda -> Lambda (normalizes stream data) -> Service Event SNS Topic

最新更新