我的应用需要采取的步骤是:
当我分别测试它们时,所有步骤都可以工作,但是如上所述,我不知道如何使代码一起工作。如果我要创建多个lambda函数,请使用一个lambda或尝试其他选项。
注意:标签数据需要通过API返回给用户
应该是这样的:
rekognition = boto3.client("rekognition")
sns = boto3.client("sns")
def lambda_handler(event, context):
# should be triggered when s3 recives file after API call
response = rekognition.start_label_detection(
Video = {
"S3Object": {
"Bucket": BUCKET,
"Name": KEY
}
},
NotificationChannel = {
"SNSTopicArn": SNS_TOPIC_ARN,
"RoleArn": ROLE_ARN
}
)
# should be triggerd when sns message has arrived
if "Records" in event:
message = event["Records"][0]["Sns"]["Message"]
#perform get lables here from jobId...
# should return labels back to the user
return {
"statusCode": 200,
"body": json.dumps(lables),
"headers": {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json"
}
}
答案 0 :(得分:1)
如果要向lambda添加多个事件源触发器,则必须首先使用 event 参数(处理程序中的第一个参数)来标识事件类型。
Aws事件解析器GitHub存储库https://github.com/iammehrabalam/awseventparser
来自不同来源的AWS事件样本 https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html
答案 1 :(得分:1)
根据Error when trying to read AWS SNS message,您应该创建三个独立的Lambda函数。从一个功能完成所有操作没有任何好处。实际上,这只会使事情变得更困难。
步骤将是:
问题是,运行Amazon Rekognition Video可能需要几分钟,具体取决于视频的长度。您应该不将系统设计为等待并响应原始API调用,并返回结果,因为它可能会超时。
相反,您的前端应:
您应将其设计为异步过程(不等待),而不是同步过程(等待结果)。