【发布时间】:2018-01-31 16:04:52
【问题描述】:
背景
我在 S3 存储桶中存储了一些文件(对象)。 每当从 S3 存储桶中删除任何文件时,都会触发我的 Lambda 函数。 lambda 函数需要从 DynamoDB 中减去对象大小。
问题: S3 deleteObject 事件不发送对象 Size
S3 deleteObject 事件示例
{
"Records": [
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg"
},
"bucket": {
"arn": "arn:aws:s3:::mybucket",
"name": "sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectRemoved:Delete",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}
请帮我为我的用例找到解决方案。
【问题讨论】:
-
您可以在上传对象时将对象大小存储在 DynamoDB 中,然后在发生对象删除通知时检索该数据。不确定您的潜在需求是什么,但如果只是为了保持准确的存储桶大小或对象计数,那么您可以通过 CloudWatch 使用 S3 指标。
-
感谢 Jarmod,为此我需要将 FileName 设置为 DynamoDB 表的 ID(哈希)吗?因为我只会从可用于检索文件详细信息的 deleteObject 事件中收到文件名。
-
您可以使用对象键(与文件名不太一样),这很简单。除非您有数百万个对象和非常高的删除频率,在这种情况下,您需要考虑对象键的哈希。
-
感谢 jarmod,我现在通过创建 DynamoDB 文件条目表解决了这个问题。
标签: amazon-web-services amazon-s3 aws-sdk aws-sdk-nodejs