尝试读取AWS SNS消息时出错

时间:2018-11-02 17:10:28

标签: python amazon-web-services amazon-sns amazon-rekognition

我需要将Rekognition发送的消息返回给SNS,但是我在CloudWatch中收到此错误:

  

“记录”:KeyError追溯(最近一次通话):文件   “ /var/task/AnalyzeVideo/lambda_function.py”,第34行,在   lambda_handler message = event [“ Records”] [0] [“ Sns”] [“ Message”]   KeyError:“记录”

代码:

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

这是使用python在AWS Lambda中实现Rekognition存储的视频的正确方法吗,我没有找到任何示例。

更新:

我的应用需要采取的步骤是:

  1. 在前端,用户使用API​​网关触发lambda函数 将文件发送到s3
  2. 文件到达时触发相同的lambda函数以应用视频 识别并将jobId发送到SNS
  3. 当SNS收到消息时,触发相同的lambda函数以获取 标签数据并使用API​​网关将数据返回给用户

1 个答案:

答案 0 :(得分:2)

您的函数正在调用rekognition.start_label_detection()(大概是您用未显示的代码创建了rekognition客户端)。

此API调用开始对视频进行标签检测。完成后,它将向指定的SNS主题发布消息。您可以将Lambda函数连接到SNS,以在完成后检索标签检测的详细信息。

但是,您的代码混合了操作顺序。相反,您应该执行以下操作:

  • 某些东西(可能不是Lambda函数)应该调用start_label_detection()来开始扫描视频的过程。这可能需要几分钟。
  • 应将Lambda函数配置为在SNS主题收到消息时触发。
  • 然后将Lambda函数传递给邮件的副本,该副本可用于调用get_label_detection()以检索扫描的详细信息。

因此,第一步是将初始start_label_detection()请求与检索结果的代码分开。然后,修改Lambda函数以通过get_label_detection()检索结果并处理结果。