S3 事件通知只发送元数据到 SQS

S3 event notification only sends metadata to SQS

正在尝试了解 SQS。

我最近启用了 S3 事件以将数据从 S3 同步到 SQS。当我将文件(一些纯文本数据)上传到 S3 时,我只能在 SQS 队列中看到(上传到 S3 的文件的)元数据,而不是文件中的实际数据。

下面是我从 SQS cli 得到的响应。

{
"Messages": [{
    "Body": "{\"Records\":[{\"eventVersion\":\"2.1\",\"eventSource\":\"aws:s3\",\"awsRegion\":\"us-west-2\",\"eventTime\":\"2019-02-03T04:20:52.812Z\",\"eventName\":\"ObjectCreated:Put\",\"userIdentity\":{\"principalId\":\"AWS:AROAJPPH7T6UMTQNWQDV4:email@email.com\"},\"requestParameters\":{\"sourceIPAddress\":\"***.***.95.237\"},\"responseElements\":{\"x-amz-request-id\":\"D0FBEB5DD148EC84\",\"x-amz-id-2\":\"F7q+hW5hb6f02J42gT1wWDWjAp2wuQ3ojio1n2Bz/jZCS+e+6/zjkYsUfRNB59dqH61p67rPJDU=\"},\"s3\":{\"s3SchemaVersion\":\"1.0\",\"configurationId\":\"SQS-hops-mab-new-hotelids\",\"bucket\":{\"name\":\"bukcet-name\",\"ownerIdentity\":{\"principalId\":\"A3HAX2MIKOSGAO\"},\"arn\":\"arn:aws:s3:::bukcet-name\"},\"object\":{\"key\":\"prefix/data_file\",\"size\":80,\"eTag\":\"b10063d01db20998584a425f0fa77a29\",\"sequencer\":\"005C566C24C2E9A48A\"}}}]}",
    "ReceiptHandle": "AQEBGIumiawoH/pKK5deThbTsCuZ8bWlgF/p8qiL1VTrDqpkUkVxWUxlzMftEtfRzqFZKx+nyUCjuSb50Oicd7hq51LUexOro0+GTVtQsxJlEJ9RaxIk+7/Ia1Ac7ox2G4Mt1nnFBDiEsiPgwYwbQe0fAz1EFiI3QZuZtOdyPNFAIaObPJGhF591IwSA6xhIqgHYJwo5pvw/axVCd05Ex34wg/TFIN9Ha4RVUSDWFXpBmPtM/1V6Ek6HP/Ag0Ps3HKhG1KNOFUjq0mv6bGqaXI/HuxCGitj3uk0xX25y0lT+RFomWcDyKpbmfm2fue8StABrKE7sm/inc1Zbd/4qKFTNUdPqQVqIr3s55plAPDXGvNiXBx4O7FkrE1jrxHBeONMRrlYHe2/KeL0WaITYu3dxNw==",
    "MD5OfBody": "0c04939f7c38ff3f9992ef911b514ed7",
    "MessageId": "f7fcb7da-66cb-4a59-acf0-79f75e9a60ce"
}]

}

下面是上面 Body 部分的元数据。

{
"Records": [{
    "eventVersion": "2.1",
    "eventSource": "aws:s3",
    "awsRegion": "us-west-2",
    "eventTime": "2019-02-04T01:00:31.166Z",
    "eventName": "ObjectCreated:Put",
    "userIdentity": {
        "principalId": "AWS:AROAJPPH7T6UMTQNWQDV4:email@****.com"
    },
    "requestParameters": {
        "sourceIPAddress": "***.***.95.237"
    },
    "responseElements": {
        "x-amz-request-id": "24703DDF194A1F7E",
        "x-amz-id-2": "wwpJeU6B3yZT7qaB7imsucsaM8y1hpFBi14POL4L1/2C1/CoBRkdHLgIOPzyy85a3RPJQFfE9Ys="
    },
    "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "SQS-name",
        "bucket": {
            "name": "bucket-name",
            "ownerIdentity": {
                "principalId": "A3HAX2MIKOSGAO"
            },
            "arn": "arn:aws:s3:::bucket-name"
        },
        "object": {
            "key": "prefix/datafile",
            "size": 80,
            "eTag": "b10063d01db20998584a425f0fa77a29",
            "sequencer": "005C578EAF156E8A91"
        }
    }
}]

}

S3 事件通知不是将实际数据发送到 SQS 吗?我错过了什么吗?

是的,这是正确的 SQS 将仅获取 created/modified 或基于通知事件的 S3 对象的元数据。无论您选择哪种目的地类型,所有目的地的 S3 通知结构都是相同的。 S3 对象可以是任何音频、视频或一些巨大的 JSON 文件。 SQS 有它的 limits,它不能总是接收实际的 S3 对象。