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

  • 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,如果想要获取数据信息,就要用上面的方式

Loading

Facebook评论