繁体   English   中英

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

[英]How can I get my dynamodb lambda function to check the user's identity?

我使用此文档设置了一个 dynamodb lambda 触发器。 function在更新dynamodb表时成功触发,我可以正常查看output。

我想找到更新 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 主题,而不是 stream。

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

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

删除有点棘手,因为您不能真正同时更新和删除项目。 我们目前如何做到这一点是在删除时手动生成一个删除事件,而不是依赖 stream,我们异步 lambda function 并传递用户/服务数据。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM