amazon-web-services - 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 SNS 订阅中,激活Amazon SNS 原始消息传输。
这将以更简洁的形式传递 S3 事件,其中body
包含来自 S3 的 JSON 的字符串版本。您需要使用JSON.parse()
将其转换为对象。
推荐阅读
- java - WebSocket RemoteEndpoint 不可用问题将数据发送回客户端
- reactjs - 材质 UI 范围最小值最大值错误:无法读取 null 的属性“焦点”
- python - 在 shell /bin/bash 中运行 Python 3 脚本时 Automator 中的 importError
- .htaccess - html 扩展的 htaccess url 重写规则
- php - WP Rest API 在未登录时返回所有结果
- r - 从R中特殊字符之间的字符串中删除子字符串
- scala - 如何在 Scala 中通过 scala.io.Codec 使用日志字符解码错误
- sql - 一个表比其他表慢的原因 SQL Server
- javascript - 从子组件触发模态
- r - 在 R 中,如何删除基于两列的重复项,其值可能是可交换的?