Ключ S3 отсутствует в уведомлении о событии S3

#amazon-web-services #amazon-s3 #aws-lambda #amazon-sqs #amazon-sns

Вопрос:

Здравствуйте, в настоящее время у меня настроено уведомление о событии в моем сегменте s3. Это уведомление отправляется в раздел SNS, затем в очередь SQS и, наконец, в лямбда.

Моя конечная цель состоит в том, чтобы мой лямбда-код прочитал json уведомления о событии и проанализировал корзину и ключ.

Проблема в том, что я вижу имя корзины в json, но не ключ, когда я распечатываю объект ‘event‘ с помощью python. Как / куда мне следует выполнить отладку, чтобы выяснить, что происходит? Я помню, что видел ключ в 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'
}]
 

}

Ответ №1:

В вашей подписке на Amazon SNS активируйте доставку необработанных сообщений Amazon SNS.

Доставка необработанных сообщений Amazon SNS

Это позволит передать событие S3 в более чистой форме, body содержащей строковую версию JSON из S3. Вам нужно будет использовать JSON.parse() для преобразования его в объект.