我在写了一篇介绍无服务器架构使用初体验的文章后,对于总结的心得和取得的成绩还沾沾自喜。然而,次日早晨的遭遇却让我苦不堪言。
度了两周的假期后我在这天早上起来,准备工作。我查了一下邮件和短信,冲了个澡,吃过了早餐――你也知道这是每天的惯例。然后在7点43分,我收到了亚马逊发来的预算通知。这时候,想必诸位已猜到发生了什么。
AWS预算通知邮件
乍一看,费用似乎并不多。预测费用83.28美元,我预料实际总费用大概少5美元。我马上登录到亚马逊控制台,径直进入到计费部分,发现预测费用居然高达800美元,实际费用180美元。我脑袋一时空白,这笔费用对我来说太高了,诸位也许可以从邮件中的预算值中看出来。
我赶紧马上分析日志,找到了自己犯的错误。这是昨天我在撰写博文时发现的一个bug,忘了更改代码就直接部署上去……
我的S3存储桶(S3 bucket)采用了这种设置方式:只要添加新文件,就会触发一个Lambda函数,该函数根据文件类型来确定缓存持续时间,并存储在元数据中。由于对象已被覆盖,它再次触发该事件,因为它被视作一个新的对象――这进而再次触发Lambda函数。是有处理该行为的检查机制,我检查了元数据是否已经在那里;如果在,就会用一个简单的返回语句终结脚本。问题就出在这里;由于重构(refactor),我忘了返回语句,它完全继续再次覆盖。因而形成了无限循环。
我觉得脚本一直在运行,因为在我发表我那篇博文前夕,日志全是关于它的内容。
我觉得这天再糟糕不过了,几小时过后,确实如此。我猜费用定期更新,因为它更新后,费用再次上涨。
AWS费用
实际费用现在是206美元,预测费用超过1000美元,这让我重新考虑将来要不要使用按使用付费的服务。犯了个小小的错误,却花费大笔钱,预算通知来得太晚了,我对此无能为力。
眼下,我不断刷新亚马逊上的计费页面,希望费用不会变得更高――晚上估计是睡不踏实了。
我倒不是说无服务器很坏,而是说你在使用无服务器时要格外小心。你要留意日志,再三测试各个部分。设置预算警报,尽管我最后的费用仍有206美元,但要是没有预算警报,费用会高得多。
为有兴趣的读者提供一些统计数字,你可以清楚地发现S3和Lambda一直非常活跃。
AWS按服务收取的费用
这恐怕是本人做过的最愚蠢的事情了。少了一个返回,最后害得我破费206美元。
相关阅读:
中高端IT圈人群,欢迎加入!
赏金制:欢迎来爆料!长期有效!
Serverless,后端小程序的未来
教你如何使用 Docker 构建 Serverless(无服务器应用程序)?
AWS上的Serverless架构详谈
Serverless Computing 是公共云的下一站吗?
值得关注的五大 Serverless Computing(无需管理服务器) 框架
OpenStack和Docker不能,Kubernetes和Mesos也不能,ServerLess能决定云计算胜负吗?
容器之后的下一波浪潮?Amazon CTO谈无服务器计算