AWS Lambda详解

文章的翻译是专门为课程的学生准备的 「云服务」。 有兴趣往这个方向发展吗? 观看 Egor Zuev(InBit 团队负责人)的大师班 “AWS EC2 服务” 并加入下一个课程组:26 月 XNUMX 日开始。

AWS Lambda详解

越来越多的人正在迁移到 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 Gateway 结合使用时,您可以显着降低成本并更快地进入市场。 使用 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详解

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

Lambda 运行时

Lambda 的主要优点是,通过代表您执行功能,服务本身会分配必要的资源。 您可以避免在系统管理上浪费时间和精力,而专注于业务逻辑和编码。

Lambda服务分为两个平面。 第一个是控制平面。 根据维基百科,控制平面是网络中负责传输信令流量和路由的部分。 它是做出有关配置、服务和分配工作负载的全局决策的主要组件。 此外,控制平面充当解决方案提供商的网络拓扑,负责路由和管理流量。

第二个平面是数据平面。 它和控制平面一样,有自己的任务。 控制平面提供用于管理函数(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 被打包成 Lambda Worker 硬件平台的构建块,该平台由 AWS 拥有和运营。 不同的功能不能使用相同的运行时,不同的 AWS 账户的 microVM 也不是唯一的。

AWS Lambda详解

AWS Lambda 隔离模型

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

  • 功能码
  • 为函数选择的任何 Lambda 层
  • 函数执行环境
  • 基于 Amazon Linux 的最小用户空间

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

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

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

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

保存环境和进程状态

尽管 Lambda 运行时对于不同的函数来说是唯一的,但它们可以重复调用同一函数,这意味着运行时可以在被销毁之前存活几个小时。

每个 Lambda 运行时还有一个可通过 /tmp 目录访问的可写文件系统。 无法从其他运行时访问其内容。 就进程状态持久性而言,写入 /tmp 的文件在运行时环境的整个生命周期中都存在。 这允许累积多个调用的结果,这对于加载机器学习模型等昂贵的操作特别有用。

通话数据传输

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

在请求-响应调用期间,负载从请求处理 API (API Caller)(例如 AWS API Gateway 或 AWS SDK)流向负载均衡器,然后流向 Lambda 调用服务(Invoke Service)。 后者确定执行函数的适当环境,并将有效负载传递到那里以完成调用。 负载均衡器通过 Internet 接收受 TLS 保护的流量。 Lambda 服务内的流量(在负载均衡器之后)通过特定 AWS 区域中的内部 VPC。

AWS Lambda详解

AWS Lambda 调用处理模型:请求-响应模式

事件调用可以立即进行或添加到队列中。 在某些情况下,队列是使用 Amazon SQS (Amazon Simple Queue Service) 实现的,它通过内部轮询器进程将调用传递给 Lambda 调用履行服务。 传输的流量受 TLS 保护,并且 Amazon SQS 中存储的数据没有额外的加密。

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

监控

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

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

亚马逊云跟踪
允许您记录、持续监控和维护与您的 AWS 基础设施相关的账户活动信息。 您将拥有使用 AWS 管理控制台、AWS 开发工具包、命令行工具和其他 AWS 服务执行的操作的完整历史记录。

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

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

结论

AWS Lambda 提供了一套强大的工具来构建安全且可扩展的应用程序。 AWS Lambda 中的许多安全性和合规性实践与其他 AWS 服务中的相同,但也有例外。 截至 2019 年 1 月,Lambda 符合 SOC 2、SOC 3、SOC XNUMX、PCI DSS、健康保险流通和责任法案 (HIPAA) 合规性以及其他法规。 因此,当您考虑实施下一个应用程序时,请考虑 AWS Lambda 服务 - 它可能最适合您的任务。

来源: habr.com

添加评论