AWS – Lambda 简单介绍
Lambda 是AWS推出的lserverless服务,用户无需管理服务器,只需要提交代码(php / nodejs / go / java / C# 等等)运行就可以了,就是FaaS (Function as service)。Lambda是按照运行时长,使用的ram,请求数量计费的。
Lambda限制(Execution)
- 最长可运行900秒(15分钟)
- 内存分配128mb – 10GB (每MB增加)
- 硬碟容量512mb – 10GB
- 同时运行1000次(可通过service quota请求增加)
- environment variable最多4kb
Lambda限制(Deployment)
- deployment代码(.zip压缩)最多可提交50MB
- deployment代码,未压缩和所有使用的dependencies代码,最多可提交250MB
- environment variable最多4kb
- 启动时可以使用/tmp目录加载其他文件
Lambda能够跟以下的服务进行整合
从数据源提交,然后trigger到lambda进行接下来的计算,典型的serverless decoupling的设计
例子1: 创建Thumbnail
可以在S3 event notification 添加活动激活,当新文件上传到S3的时候就trigger Lambda 进行thumbnail的生成,然后把新图片存入S3当中,和把metadata存入dynamodb
例子2:创建Serverless CronJob
在EventBridge当中创建cron,然后时间一到就trigger Lambda运行定期任务
Lambda SnapStart
- 可增加10倍程序运行程序所需的时间
- 支持java11或以上的版本(无需付extra cost)
- 把一开始init的memory和disk进行快照,那么启动的时候就非常快
Lambda@Edge
- 参考文章:https://medium.com/starbugs/coding-your-cdn-%E5%85%85%E6%BB%BF%E9%A9%9A%E5%A5%87%E7%9A%84-aws-lambda-edge-763d9dd1f00d
- lambda和cloudfront的结合,让你的代码能够在edge location计算,那么就更加贴近用户latency也会比较少一些
- Lambda Edge能够更改Viewer和Origin 4边所有的request和response
- 在一个region编写你的function,然后CloudFront会自动复制到边缘计算当中
- 每秒1000个请求
- Lambda@Edge使用案例
CloudFront Function
- 类似于Lambda Edge在边缘edge location进行计算,但是只支持JavaScript写的轻量function
- 高性能High Scale, 可以瞬间支持每秒几百万的请求
- CloudFront Function是Cloudfront原生原有的的功能
- 以下图片是CDN CloudFront的缓存方式,CloudFront Function只能更改viewer request和viewer response 无法更改origin服务器的任何东西
- CloudFront Function使用案例
CloudFront Function和Lambda@Edge的区别
Lambda In VPC
- Lambda默认是运行在我们自己VPC之外的,所以他能访问外网或DynamoDB,因为DynamoDB是public access的资源,如果要访问我们内网当中的RDS就不能了
- 所以我们能够为Lambda设定该Lambda function跑在哪个VPC / Subnet / Security Group,设定好了之后Lambda就会创建一个ENI在你的subnet当中,那么Lambda function就能通过这个ENI访问内网当中的RDS
Lambda with RDS Proxy
- 如果让Lambda直接访问RDS的话,会开启很多DB connection,那么就会降低RDS性能,所以我们需要使用RDS Proxy
- RDS Proxy的好处
– 通过池化和共享数据库连接来提高可扩展性
– 通过减少 66% 的故障转移时间并保留连接来提高可用性
– 通过强制实施 lAM Authentication 并将凭据存储在 Secrets Manager 中来提高安全性
从 RDS 和 Aurora 调用 Lambda (DataEvent)
- 当用户insert register table了之后就自动调用Lambda function 然后使用SES向用户发出Welcome email (这就是在数据库服务器当中设置DataEvent)
- 需要为RDS的Security Group开启允许outbound流量至Lambda,否则RDS无法调用Lambda
- DB instance需要有IAM权限调用Lambda function
从 RDS 和 Aurora 调用 Lambda (EventNotification)
- 拿不到操作的数据,只有当RDS Instance (create / start / stop)就会记录在RDS Event Notification, 然后trigger lambda function
- 无法获取data event,如果想要获取数据信息,就要用上面的方式
Facebook评论