首页 > 解决方案 > S3 键不在 S3 事件通知中

问题描述

您好,我目前使用我的 s3 存储桶设置了事件通知。这个通知被发送到一个SNS 主题,然后是一个SQS 队列,最后是一个lambda

我的最终目标是让我的 lambda 读取事件通知 json 并解析出存储桶和密钥。

问题是当我使用 python打印出“事件”对象时,我在 json 中看到了存储桶名称,但没有看到键。我应该如何/在哪里进行调试以弄清楚发生了什么?我确实记得从以前的实现中看到了 json 中的密钥

json看起来像:

{
'Records': [{
    'messageId': '15d42178-c59c-4f3a-8efa-cce8a20acd5b',
    'receiptHandle': 'AQEBnPN7q4+jLFQfExOytZYH69w4kvI4ohjJGFqUqOAvCjRHMfbFFvgEeLVjonZ5q4GAYyzLzDSRQmZv3+YTvE3VYqKmU+Nt0rgX824LoMMkKKMuSWBT6c1a0X5dXRJRzFaOKjpniONRg5Gdm1V9I/7mW0x+Zfi0PXr5cQZXVA1NNUdJ4tIkwtpuC+Rh/dbGFQmAo6fQDuCnpzRW1NKGGda440t3ivtUQMvrniwY8ILKVoX9pnS1rAVgVPGBUo8mXyH9ec9p/Er9O9N5Kxc3xQE44MhHUygD1iJbRROBHG9m0Mj6qbKx4uI7S4KQVWRK8hHkxYFUtP4NzhzcGP1LfY91+zG4mNweGzQkfDbvn0LG9+6guxv9dW+uGz1c3f9My7272s+ABfksvfbNRgPSgwJecg==',
    'body': '{\n  "Type" : "Notification",\n  "MessageId" : "78cadcbb-f349-5bae-b39b-85504866b186",\n  "TopicArn" : "<topic arn>",\n  "Subject" : "Amazon S3 Notification",\n  "Message" : "{\\"Service\\":\\"Amazon S3\\",\\"Event\\":\\"s3:TestEvent\\",\\"Time\\":\\"2021-10-21T19:01:03.083Z\\",\\"Bucket\\":\\"<s3 bucket>\\",\\"RequestId\\":\\"TCJP8AZ6S75XXXPN\\",\\"HostId\\":\\"VYNq+Jh5Hkg+Vykp2RcIy9lSca7uJyhzLPfE8tcgnt3Je9kH0I+H3zvzvJkd6IvfZKZm2jYqu4Q=\\"}",\n  "Timestamp" : "2021-10-21T19:01:03.285Z",\n  "SignatureVersion" : "1",\n  "Signature" : "EE9xsZx8hezxh8Yhyj8DLc+VSGYowl641kHgqr8tWq2msNwOBv4KEZoTtHJ/hdnfNYLEBsR7imsfv5ZrX7nKRKL2kR8xax57tcih7GRbifIuFyrs9wAhtcuclf2NJQG4eY9OrOHHxPN3fSvNI9xduPeBrxB2TAfbTcWq4AeN0C4KriV18J2dU28ecMJGtmqK0JM+2KLEuwQe/dyYiEnEnWu5EfGweDhYCRvmB1aUPRcW4s3yOHIckklmHhBLkbmufl1me/hdO7GEGa1ju8wJDF33hmmCCSE6M7ITl9niWICBtvWlFz1Md5OiswyriRyN4LZjmvEjzRZtNwy/qMkDYA==",\n  "SigningCertURL" : "<cert url>",\n  "UnsubscribeURL" : "<unsubscribe url>"\n}',
    'attributes': {
        'ApproximateReceiveCount': '34',
        'SentTimestamp': <timestamp>,
        'SenderId': <senderid>,
        'ApproximateFirstReceiveTimestamp': <timestamp>
    },
    'messageAttributes': {},
    'md5OfBody': <md5>,
    'eventSource': 'aws:sqs',
    'eventSourceARN': <queue-arn>,
    'awsRegion': 'us-east-1'
}]

}

标签: amazon-web-servicesamazon-s3aws-lambdaamazon-sqsamazon-sns

解决方案


在您的 Amazon SNS 订阅中,激活Amazon SNS 原始消息传输

Amazon SNS 原始消息传送

这将以更简洁的形式传递 S3 事件,其中body包含来自 S3 的 JSON 的字符串版本。您需要使用JSON.parse()将其转换为对象。


推荐阅读