极客视点
极客时间编辑部
极客时间编辑部
113241 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:16
登录|注册

掌握无服务器这些技巧可以帮助你节约时间

讲述:丁婵大小:2.41M时长:05:16
近日,Launch First Agency 的首席工程师丹·雅凯蒂(Dan Jakaitis)介绍了他去年在 AWS 上基于 Serverless Framework 构建的一个生产级项目所获得的经验,他将这些无服务器的实践清单列出,希望能对开发者有所帮助,帮助开发者节约一些时间,减少一些麻烦。

1. 将 Lambda 函数连接到 RDS 数据库

要将 Lambda 函数连接到 RDS 数据库,可行的方法有两种:
其一,RDS 位于 VPC 中,但对所有 IP 开放,这会造成安全弱点。其本质在于设置 VPC 安全组允许任何入站 IP 地址连接你的数据库(假设客户端有正确的用户名和密码)。这会导致 RDS 实例在面对互联网上肆虐的爬虫这种自动化攻击措施时门户大开。如果缺乏足够的技术和保护能力,最好别这样做。
其二,RDS 和 Lambda 位于同一个 VPC 中,虽然更复杂,但这是正确的做法。对于新手,你的所有函数必须包含与 RDS 集群共享的恰当子网和安全组。随后需要确保为 Lambda 提供了 ENI 访问。ENI 的分配存在一些硬性限制,在将任何 Lambda 放入 VPC 前必需妥善考虑。
对于在 VPC 中运行 Lambda,会遇到一些有关冷启动和延迟的问题。在某些安全设置下,这些问题不可避免,因此你需要确保仅将必要的 Lambda 放入 VPC 中,并尽可能使用缓存来避免不必要的 ENI 分配或 DB 连接。

2. 确保你的 Lambda 附加了正确的角色

如果未能给函数添加正确的权限,Serverless Framework 在部署或打包阶段并不会给出任何错误信息。因而随后只能翻查海量 CloudWatch 日志来判断到底哪里出错了。请养成良好习惯:部署任何新函数之前,务必要检查 iamRoleStatements。

3. IAM 角色名称最多只能用 64 个字符

这条原则含义显而易见,但在 sls deploy 过程中却很不容易发现问题。对于函数和 Stage 的名称一定要妥善规划。

4. CloudFormation 的资源上限为 200

如果不使用 Serverless Framework,解决方案也很简单,在 CloudFormation 中创建嵌套的栈即可。嵌套栈可以在函数层面或域实体层面组织成为一个函数,具体怎么做完全取决于你的偏好。
目前还不能(很轻松地)直接在 serverless.yml 文件中配置嵌套栈,而是需要借助插件。对于一些非常成熟的服务,如果包含多个相互穿插的依赖项,可能还无法直接由这样的插件来处理。

5. 可将多个事件附加给同一个 Lambda

如果有多个应用程序客户端访问同一个 API,那么这将是一种很棒的解决方案。客户端 A 会有自己的 Lambda 授权方(Authorizer),客户端 B 会使用另一个授权方。这样做的优势在于,可以用最少的工作量为不同客户端应用不同的 API 网关设置(如缓存、跟踪、错误代码、请求限制)。

6. 自定义授权方需要手工禁用缓存

这一点很重要,因为你肯定不希望自己的授权方将基于之前的请求所创建的拒绝 / 允许策略缓存起来。

7. AWS SDK 也是 Lambda 运行时的一部分

AWS 在自己的文档中并未提及这一点,但需要提醒你,不要将该 SDK 包含在自己已部署的依赖项中,这会导致整个部署的体积迅速激增。

8. 单独打包,不要包含测试文件

丹·雅凯蒂表示,他们 sls deploy 的 Zip 文件非常庞大。对于包含约 20 个 Lambda 的一个服务,最终压缩之后的整个部署文件的体积约为 15GB。因此他们很快就碰到了 Lambda 75GB 的软性限制而不得不申请服务扩容。
尽管扩容后的上限提高到 150GB,但他们依然开始调查这些软件包到底出了什么问题。此时可以通过两个操作让部署文件的体积实现数量级的“瘦身”:
第一步,最简单的方法是在 Webpack 配置中进行文件排除,这样可以避免所有测试文件进入到最终构建中。之后可以单独打包所有函数,这一做法真正让软件包实现了数量级的瘦身,并且远远低于 150GB 的限制。
以上就是今天的内容,希望对你有所帮助。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
1. 将 Lambda 函数连接到 RDS 数据库
2. 确保你的 Lambda 附加了正确的角色
3. IAM 角色名称最多只能用 64 个字符
4. CloudFormation 的资源上限为 200
5. 可将多个事件附加给同一个 Lambda
6. 自定义授权方需要手工禁用缓存
7. AWS SDK 也是 Lambda 运行时的一部分
8. 单独打包,不要包含测试文件
显示
设置
留言
收藏
15
沉浸
阅读
分享
手机端
快捷键
回顶部