Ошибка при попытке прочитать сообщение AWS SNS - PullRequest
0 голосов
/ 02 ноября 2018

Мне нужно вернуть сообщение, отправленное Rekognition в SNS, но я получаю эту ошибку в CloudWatch:

'Записи': отслеживание ключевой ошибки (последний вызов был последним): файл "/var/task/AnalyzeVideo/lambda_function.py", строка 34, в lambda_handler message = event ["Records"] [0] ["Sns"] ["Message"] KeyError: 'Records'

Код:

def detect_labels(bucket, key):
    response = rekognition.start_label_detection(
        Video = {
            "S3Object": {
                "Bucket": BUCKET,
                "Name": KEY
            }
        },
        NotificationChannel = {
            "SNSTopicArn": TOPIC_ARN,
            "RoleArn": ROLE_ARN
        }
    )

    return response

def lambda_handler(event, context):
    reko_response = detect_labels(BUCKET, KEY)
    message = event["Records"][0]["Sns"]["Message"]
    return message

И это правильный способ реализации сохраненного в Rekognition видео в AWS Lambda с python. Я не нашел на нем примеров.

Обновление:

Мое приложение должно выполнить следующие шаги:

  1. В веб-интерфейсе пользователь запускает лямбда-функцию с помощью шлюза API, который отправляет файл на s3
  2. Когда файл поступает, запускается та же лямбда-функция для применения видео распознавание и отправка jobId на SNS
  3. когда SNS получает сообщение, запускается та же самая лямбда-функция, чтобы получить пометить данные и вернуть данные пользователю с помощью шлюза API

1 Ответ

0 голосов
/ 03 ноября 2018

Ваша функция вызывает rekognition.start_label_detection() (и, вероятно, вы создали клиент rekognition в коде, который не показан).

Этот вызов API запускает обнаружение метки на видео. Когда он закончится, он опубликует сообщение в заданной теме SNS. Вы можете подключить лямбда-функцию к SNS, чтобы получить информацию об обнаружении метки после ее завершения.

Однако в вашем коде запутан порядок операций. Вместо этого вы должны делать следующее:

  • Что-то (вероятно, не лямбда-функция) должно вызвать start_label_detection(), чтобы начать процесс сканирования видео. Это может занять несколько минут.
  • Лямбда-функция должна быть настроена на запуск при получении сообщения темой SNS.
  • Затем функции Lambda передается копия сообщения, которую можно использовать для вызова get_label_detection() для получения подробностей сканирования.

Итак, ваш первый шаг - отделить первоначальный запрос start_label_detection() от кода, который извлекает результаты. Затем измените функцию Lambda для получения результатов с помощью get_label_detection() и обработки результатов.

...