AWS Lambda的详细分析

本文的翻译是专门为Cloud Services课程的学生准备的。 朝这个方向发展是否有趣? 观看Egor Zuev(InBit的TeamLead)的“ AWS EC2 Service”大师班,并参加最近的课程组:从9月26日开始。



越来越多的人开始使用AWS Lambda以获得可扩展性,性能,成本节省以及每月处理数百万甚至数万亿个请求的能力。 为此,您不需要管理服务所基于的基础结构。 自动缩放功能使您每秒可以处理数千个同时请求。 我认为AWS Lambda可以正确地称为最受欢迎的AWS服务之一。


AWS Lambda


AWS Lambda是一种面向事件的无服务器计算服务,可让您执行代码而无需分配和管理服务器,并基于用户逻辑补充其他AWS服务。 Lambda自动响应各种事件(所谓的触发器),例如通过Amazon API Gateway的HTTP请求,Amazon S3篮子或Amazon DynamoDB表中的数据更改; 或者,您可以使用AWS开发工具包通过API调用和AWS Step Functions中的状态转换来运行代码。


Lambda在高度可访问的计算基础结构上运行代码,并完全负责管理基础平台,包括服务器和操作系统维护,资源分配,自动扩展,代码监视和日志记录。 也就是说,您只需要上传代码并配置执行代码的方式和时间。 反过来,该服务将负责其启动并确保您的应用程序的高可用性。


什么时候升级到Lambda?


如果服务支持您的代码的语言和运行时,那么AWS Lambda是适用于许多应用程序场景的便捷计算平台。 如果您想通过服务器维护,供应和以合理的价格扩展到第三方提供商的方式专注于代码和业务逻辑,则绝对应该升级到AWS Lambda。


Lambda是创建软件接口的理想选择,如果将服务与API网关一起使用,则可以显着降低成本并更快地进入市场。 可以使用多种方法来使用Lambda函数和选项来组织无服务器架构-每个人都可以根据自己的目标选择合适的方法。


Lambda允许您执行各种任务。 因此,感谢CloudWatch支持,您可以创建挂起的任务并自动执行单个流程。 使用该服务的性质和强度没有限制(考虑了内存消耗和时间),没有什么可以阻止您系统地开发基于Lambda的成熟的微服务。


在这里,您可以创建不经常执行的面向服务的操作。 一个典型的例子是图像缩放。 即使在分布式系统中,Lambda函数也不会失去其相关性。


因此,如果您不想参与计算资源的分配和管理,请尝试使用AWS Lambda。 如果您不需要大量的资源密集型计算,请尝试使用AWS Lambda; 如果您的代码定期运行-一切正确,则应尝试使用AWS Lambda。


安全性


到目前为止,还没有关于安全性的投诉。 另一方面,由于该模型的许多内部流程和实施功能对于AWS Lambda托管运行时的用户而言是隐藏的,因此一些公认的云安全规则不再相关。


与大多数AWS服务一样,Lambda的提供基于AWS与客户之间在安全性和合规性方面的共同责任。 由于AWS承担了服务,管理和控制服务组件(从主机操作系统和虚拟化级别到基础架构对象的物理安全性)的任务,因此该原则减轻了客户端的操作负担。


谈到AWS Lambda时,AWS负责管理基础架构,相关基础服务,操作系统和应用程序平台。 客户负责其代码的安全性,机密数据的存储,对它们的访问控制以及Lambda(身份和访问管理,IAM)的服务和资源,包括所使用功能的范围。


下图显示了适用于AWS Lambda的共享责任模型。 AWS的职责范围是橙色,客户的职责范围是蓝色。 如您所见,AWS对服务上部署的应用程序承担更多责任。



适用于AWS Lambda的分担责任模型


Lambda运行时


Lambda的主要优点是,代表您执行功能的服务本身会分配必要的资源。 您可以节省系统管理的时间和精力,并专注于业务逻辑和代码编写。


Lambda服务分为两个平面。 首先是控制平面。 根据Wikipedia所述,控制平面是网络的一部分,负责信令通信和路由。 它是做出有关工作负载分配,维护和分配的全局决策的主要组件。 此外,控制平面还充当解决方案提供商的网络拓扑,负责路由和管理流量。


第二平面是数据平面。 像控制平面一样,它有自己的任务。 管理平面提供用于管理功能(CreateFunction,UpdateFunctionCode)的API,并控制Lambda与其他AWS服务的交互。 数据平面由调用Lambda函数的Invoke API控制。 调用函数后,控制平面选择或选择为此函数预先准备的现有运行时,然后在其中执行代码。


AWS Lambda通过它们各自的运行时支持多种编程语言,包括Java 8,Python 3.7,Go,NodeJS 8,.NET Core 2等。 AWS会定期更新它们,分发安全补丁并在这些环境上执行其他维护操作。 Lambda允许您使用其他语言,前提是您自己实现适当的运行时。 然后,您将不得不处理其维护,包括监视安全性。


这一切如何运作,服务将如何执行您的功能?


每个功能只能在该功能的生命周期中存在的一个或几个选定的环境中工作,然后销毁。 在每种环境中,一次只能进行一次调用,但是如果有多个连续调用相同的函数,则可以重复使用该调用。 所有运行时都在带有硬件虚拟化的虚拟机上运行-在所谓的microVM上。 每个microVM都分配给一个特定的AWS账户,并且可以被环境重用以对该账户执行各种功能。 MicroVM打包在AWS拥有和运营的Lambda Worker硬件平台的构建模块中。 相同的运行时不能由不同的功能使用,就像microVM对于不同的AWS账户是唯一的一样。



AWS Lambda隔离模型


运行时隔离使用多种机制来实现。 在每个环境的最高级别,都有以下组件的单独副本:


  • 功能码
  • 为该功能选择的任何Lambda层
  • 函数运行时
  • Amazon Linux最小用户空间

以下机制用于隔离不同的运行时环境:


  • cgroups-限制每个运行时环境对CPU资源,内存,驱动器带宽和网络的访问;
  • 名称空间-分组进程ID,用户ID,网络接口和Linux内核管理的其他资源。 每个运行时都在自己的名称空间中运行;
  • seccomp-bpf-对可以在运行时环境中使用的系统调用的限制;
  • iptables和路由表-将运行时环境相互隔离;
  • chroot-提供对底层文件系统的有限访问。

结合专有的AWS隔离技术,这些机制可确保可靠地分离运行时环境。 以这种方式隔离的媒体无法访问或修改其他媒体中的数据。


尽管同一AWS账户的多个运行时可以在同一microVM上运行,但是在任何情况下都不可以在不同AWS账户之间共享microVM。 AWS Lambda仅使用两种机制隔离microVM:EC2实例和Firecracker。 自2015年以来,一直在基于EC2实例的Lambda中进行来宾隔离。 Firecracker是由AWS专为无服务器工作负载设计的新的开源虚拟机管理程序,于2018年推出。 在不同帐户的工作负载之间共享运行microVM的物理设备。


保存过程环境和状态


尽管Lambda运行时对于不同的功能是唯一的,但是它们可以重复调用同一功能,也就是说,运行时可以持续几个小时才能销毁。


每个Lambda运行时还具有写许可权文件系统,可通过/ tmp目录访问。 无法从其他运行时访问其内容。 关于过程状态的保存,在/ tmp中记录的文件存在于运行时的整个生命周期中。 因此,可以累积多次调用的结果,这对于诸如加载机器学习模型之类的昂贵操作特别有用。


通话数据传输


Invoke API可以在两种模式下使用:在事件模式下和在请求响应模式下。 在事件模式下,该呼叫将添加到队列中以供后续执行。 在“请求-响应”模式下,使用提供的有效负载立即调用该函数,然后返回响应。 无论哪种情况,该函数都在Lambda环境中执行,但是具有不同的有效负载路径。


在请求-响应调用期间,有效负载来自请求处理API(API调用程序)(例如AWS API Gateway或AWS开发工具包),到达负载均衡器,然后到达Lambda调用执行服务(调用服务)。 后者确定用于执行功能的适当环境,并在此传输有效负载以完成调用。 负载平衡器通过Internet接收具有TLS保护的流量。 在负载均衡器之后,Lambda服务内的流量通过特定AWS区域中的内部VPC。



AWS Lambda呼叫处理模型:请求-响应模式


事件调用可以立即进行,也可以添加到队列中。 在某些情况下,使用Amazon SQS服务(Amazon Simple Queue Service)实现队列,该服务通过内部轮询过程将呼叫转移到Lambda呼叫执行服务。 传输的流量受TLS保护,并且未提供对Amazon SQS中存储的数据的其他加密。


事件调用不会返回响应-Lambda Worker只会忽略任何响应信息。 Lambda在事件模式下处理基于Amazon S3,Amazon SNS,CloudWatch和其他来源的呼叫。 来自Amazon Kinesis和DynamoDB流的调用,来自SQS队列,应用程序负载平衡器和网关API的调用以请求-响应模式处理。


监控方式


您可以使用各种AWS机制和服务来监视和审核Lambda函数,包括以下内容。


亚马逊CloudWatch
它收集各种统计信息,例如请求数,请求持续时间以及失败的请求数。


亚马逊CloudTrail
允许您记录,持续监控和保存与您的AWS基础架构关联的账户活动信息。 您将具有使用AWS管理控制台,AWS SDK,命令行工具和其他AWS服务执行的操作的完整时间表。


AWS X射线
根据应用程序内部组件的映射,提供应用程序中请求处理所有阶段的完全可见性。 允许您在开发过程中和生产环境中分析应用程序。


AWS配置
您将能够跟踪Lambda函数的配置更改(包括删除),运行时,标签,处理程序名称,代码大小,内存分配,延迟和并发设置,以及Lambda IAM运行时角色,子网和安全组绑定。


结论


AWS Lambda提供了一组功能强大的工具来创建安全且可扩展的应用程序。 尽管有例外,但AWS Lambda中的许多安全和法规遵从方法与其他AWS服务中使用的方法没有什么不同。 截至2019年3月,Lambda符合SOC 1,SOC 2,SOC 3,PCI DSS,美国健康保险连续性和责任法案(HIPAA)以及其他法规。 因此,当您考虑实施另一个应用程序时,请考虑使用AWS Lambda服务-也许它最适合您的任务。

Source: https://habr.com/ru/post/zh-CN466519/


All Articles