Разбор триггера SQS-сообщений в AWS Лямбда - Python - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть уведомление о загрузке корзины S3, чтобы поместить сообщение в очередь SQS. Очередь SQS запускает лямбда-функцию. Я пытаюсь извлечь имя файла, который был загружен из сообщения SQS, которое запускает лямбда-функцию. Моя запись события SQS выглядит следующим образом при печати в журналах CloudWatch:

{
"Records": [
    {
        "eventVersion": "2.1",
        "eventSource": "aws:s3",
        "awsRegion": "eu-west-2",
        "eventTime": "2020-04-05T13:55:30.970Z",
        "eventName": "ObjectCreated:Put",
        "userIdentity": {
            "principalId": "A2RFWU4TTDGK95"
        },
        "requestParameters": {
            "sourceIPAddress": "HIDDEN"
        },
        "responseElements": {
            "x-amz-request-id": "024EF2A2E94BD5CA",
            "x-amz-id-2": "P/5p5mDwfIu29SeZcNo3wjJaGAiM4yqBqp4p3gOfLVPeZhf+w5sRjnxsost3BuYub1FVf7tuMFs9KoC98+fwSI9NrT5WbjYq"
        },
        "s3": {
            "s3SchemaVersion": "1.0",
            "configurationId": "ImageUpload",
            "bucket": {
                "name": "HIDDEN",
                "ownerIdentity": {
                    "principalId": "A2RFWU4TTDGK95"
                },
                "arn": "arn:aws:s3:::HIDDEN"
            },
            "object": {
                "key": "activity1.png",
                "size": 41762,
                "eTag": "9e1645a32c2948139a90e75522deb5ab",
                "sequencer": "005E89E354A986B50D"
            }
        }
    }
]
}

Использование этого кода:

import boto3
rek = boto3.client('rekognition')

def test(event, context):
    for record in event['Records']:
       print ("test")
       payload=record["body"]
       fullpayload=str(payload)
       print(fullpayload)

Использование ['s3] [' object] ['key'] Доступ к имени файла «activity1.png» в строке полезной нагрузки выдает мне эту ошибку:

's3': KeyError
Traceback (most recent call last):

Как получить доступ к имени файла из лямбда-функции?

1 Ответ

1 голос
/ 05 апреля 2020

Какой вывод у print(fullpayload)? Я ожидаю, что полезная нагрузка будет None, потому что в записи нет атрибута с именем body.

Из примера записи в вашем вопросе вы должны сделать это:

record['s3']['object']['key']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...