在我第一次涉足云中的任何计算时,我能够跟随Mark West的instructions了解如何使用AWS Rekognition处理来自安全摄像头的图像,这些图像被转储到S3存储桶并提供通知如果有人被发现他的代码是为Raspberry Pi摄像机设置的,但我能够通过将触发的图像FTP到我的Synology NAS并使用CloudSync将其镜像到S3存储桶来使其适应我的IP摄像机。步进函数根据下图调用Lambda函数,我在15秒内收到一封电子邮件,其中包含检测到的标签列表和附加的图像。
问题是,只要触发条件,相机就会每秒上传一张图像,如果相机前面有很多活动,我可以快速收集几百封电子邮件。
我想在make-alert-decision和nodemailer-send-notification之间插入一个函数,该函数将检查是否在最后一分钟内发送了电子邮件通知,如果没有,请继续执行nodemailer-send-notification权限如果是这样,请将标签列表和附件路径存储在一个数组中,然后在60秒后发送一封包含所有附件的电子邮件。
我知道我必须在外部存储数据并遇到this article解释不同缓存数据方法的好处,我还认为我可以检查上传到S3的文件的时间戳来比较已经过去的时间在最近上传的两个文件之间,决定是继续还是批量处理该文件。
作为AWS的新手,我正在寻找从复杂性和成本角度来看哪种方法最有意义的建议。我可以忍受文章中讨论的任何方法所涉及的滞后,只是不知道如何继续,因为我从未使用或甚至没有听说过任何服务。
谢谢!
答案 0 :(得分:1)
您可以使用make-alert-decision
lambda nodemailer-send-notification
向每个标签和附件路径发送消息的SQS queue
。
lambda struct data {
let text : String!
let pic : UIImage!
}
class ResultsTableViewController: UITableViewController {
var cellData = [data]()
override func viewDidLoad() {
cellData = [data(text: "first", pic: #imageLiteral(resourceName: "Screen Shot 2017-06-28 at 1.55.48 PM")),
data(text: "second", pic: #imageLiteral(resourceName: "Screen Shot 2017-06-28 at 1.55.48 PM")),
data(text: "third", pic: #imageLiteral(resourceName: "Screen Shot 2017-06-28 at 1.55.48 PM"))]
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cellData.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed( "resultsVOiew", owner: self, options: nil)?.first as! ResultsViewCell
cell.imageView1.image = cellData[indexPath.row].pic
cell.OrganizationName.text = cellData[indexPath.row].text
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 91
}
}
将成为该队列的使用者,但是executed on a regular schedule。
您可以指定要每1分钟执行一次的lambda,读取队列中的所有消息 - 并立即从队列中删除它们或设置适合的可见时间并在之后删除 - 以获取附件列表并发送单个电子邮件我们每隔60秒就会收到一封包含所有附件的电子邮件。