尝试读取 AWS SNS 消息时出错
Error when trying to read AWS SNS message
我需要 return Rekognition 发送到 SNS 的消息,但我在 CloudWatch 中收到此错误:
'Records': KeyError Traceback (most recent call last): File
"/var/task/AnalyzeVideo/lambda_function.py", line 34, in
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
这是使用 python 在 AWS Lambda 中实现 Rekognition 存储视频的正确方法吗?我没有找到任何示例。
更新:
我的应用需要执行的步骤是:
- 在前端,用户使用 API 网关触发 lambda 函数
发送文件到 s3
- 当文件到达时触发相同的 lambda 函数来应用视频
识别并发送 jobId 到 SNS
- 当 SNS 收到消息时触发相同的 lambda 函数来获取
标签数据和 return 数据通过 API 网关
返回给用户
您的函数正在调用 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()
检索结果并处理结果。
我需要 return Rekognition 发送到 SNS 的消息,但我在 CloudWatch 中收到此错误:
'Records': KeyError Traceback (most recent call last): File "/var/task/AnalyzeVideo/lambda_function.py", line 34, in 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
这是使用 python 在 AWS Lambda 中实现 Rekognition 存储视频的正确方法吗?我没有找到任何示例。
更新:
我的应用需要执行的步骤是:
- 在前端,用户使用 API 网关触发 lambda 函数 发送文件到 s3
- 当文件到达时触发相同的 lambda 函数来应用视频 识别并发送 jobId 到 SNS
- 当 SNS 收到消息时触发相同的 lambda 函数来获取 标签数据和 return 数据通过 API 网关 返回给用户
您的函数正在调用 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()
检索结果并处理结果。