今天,我们宣布推出 AWS Lambda 托管实例,这是一项新功能,您可以使用它在您的 Amazon Elastic Compute Cloud (Amazon EC2) 计算资源上运行 AWS Lambda 函数,同时保持无服务器操作的简洁性。此项增强功能解决了一个关键的客户需求:在不牺牲您熟悉且喜爱的无服务器开发体验的前提下,访问专用计算选项并优化稳态工作负载的成本。
尽管 Lambda 消除了基础设施管理,但某些工作负载需要专用硬件(例如特定的 CPU 架构)或通过 Amazon EC2 购买承诺来实现成本优化。这种矛盾迫使许多团队自行管理基础设施,仅仅为了获得所需的计算选项或定价模型而牺牲了 Lambda 的无服务器优势。这通常会导致重大的架构转变和更大的运营责任。
Lambda 托管实例 您可以使用 Lambda 托管实例来定义您的 Lambda 函数如何在 EC2 实例上运行。Amazon Web Services (AWS) 负责在您的账户中设置和管理这些实例。您可以访问最新一代的 Amazon EC2 实例,而 AWS 则处理所有操作复杂性——实例生命周期管理、操作系统修补、负载均衡和自动扩缩。这意味着您可以选择针对特定工作负载需求优化的计算配置文件,例如用于数据密集型应用程序的高带宽网络,而无需承担管理 Amazon EC2 基础设施的运营负担。
每个执行环境可以处理多个请求,而不是一次只处理一个请求。这可以显著减少计算消耗,因为您的代码可以跨并发请求高效地共享资源,而不是为每个调用启动单独的执行环境。Lambda 托管实例提供了对 Amazon EC2 基于承诺的定价模型(例如计算节省计划和预留实例)的访问权限,相比 Amazon EC2 按需定价,这些模型最多可提供 72% 的折扣。这为稳态工作负载提供了显著的成本节约,同时保持了熟悉的 Lambda 编程模型。
让我们来试试看 要尝试使用 Lambda 托管实例,我首先需要创建一个容量提供者。如下图所示,在导航窗格的“其他资源”下有一个新的选项卡用于创建这些资源。
创建容量提供者时,我需要指定虚拟私有云 (VPC)、子网配置和安全组。通过容量提供者配置,我还可以告诉 Lambda 在何处配置和管理实例。
我还可以指定希望包含或排除的 EC2 实例类型,或者为了高多样性选择包含所有实例类型。此外,我可以指定一些与自动扩缩相关的控制项,包括最大 vCPU 数量,以及是否要使用自动扩缩或使用 CPU 策略。
配置好容量提供者后,我可以在创建新的 Lambda 函数时通过其 Amazon 资源名称 (ARN) 来选择它。在这里,我还可以选择所需的内存分配以及内存与 vCPU 的比率。
使用 Lambda 托管实例 现在我们已经了解了基本设置,让我们更详细地探讨 Lambda 托管实例的工作原理。该功能将 EC2 实例组织成容量提供者,您可以通过 Lambda 控制台、AWS 命令行界面 (AWS CLI) 或基础设施即代码 (IaC) 工具(如 AWS CloudFormation、AWS Serverless Application Model (AWS SAM)、AWS Cloud Development Kit (AWS CDK) 和 Terraform)进行配置。每个容量提供者定义了您需要的计算特性,包括实例类型、网络配置和扩缩参数。
创建容量提供者时,您可以从最新一代的 EC2 实例中进行选择,以匹配您的工作负载需求。对于成本优化的通用计算,您可以选择基于 AWS Graviton4 的实例,它提供了出色的性价比。如果您不确定选择哪种实例类型,AWS Lambda 会根据您的函数配置提供优化的默认值,以平衡性能和成本。
创建容量提供者后,您可以通过简单的配置更改将 Lambda 函数附加到它。在附加函数之前,您应该检查代码中是否存在可能在多并发环境中导致问题的编程模式,例如写入或读取非每个请求唯一的文件路径,或者在调用之间使用共享内存空间和变量。
Lambda 会自动将请求路由到实例上预配置的执行环境,消除了可能影响首次请求延迟的冷启动。每个执行环境可以通过多并发功能处理多个并发请求,从而最大化您函数之间的资源利用率。当流量增加需要额外容量时,AWS 会在几十秒内自动启动新实例并将其添加到您的容量提供者中。默认情况下,容量提供者最多可以吸收高达 50% 的流量峰值而无需进行扩缩,但内置的断路器会在极端流量激增时保护您的计算资源——如果容量提供者达到最大配置容量且仍在启动额外容量,则会暂时以 429 状态码限制请求。
在整个过程中,操作和架构模型始终保持无服务器。AWS 负责实例配置、操作系统修补、安全更新、跨实例的负载均衡以及基于需求的自动扩缩。AWS 会自动将安全补丁和错误修复应用到操作系统和运行时组件,通常不会中断正在运行的应用程序。此外,实例的最长寿命为 14 天,以符合行业安全和合规标准。您无需编写自动扩缩策略、配置负载均衡器或自行管理实例生命周期,并且您的函数代码、事件源集成、AWS Identity and Access Management (AWS IAM) 权限和 Amazon CloudWatch 监控保持不变。
现已可用 您现在可以通过 Lambda 控制台、AWS CLI 或 AWS SDK 开始使用 Lambda 托管实例。该功能在美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、亚太地区(东京)和欧洲(爱尔兰)区域可用。有关区域可用性和未来路线图,请访问 AWS 区域功能。在 AWS Lambda 文档 中了解更多信息。
Lambda 托管实例的定价包含三个部分。首先,您需要支付标准 Lambda 请求费用,每百万次调用 0.20 美元。其次,您需要为标准 Amazon EC2 实例配置的计算容量付费。您现有的 Amazon EC2 定价协议(包括计算节省计划和预留实例)可以应用于这些实例费用,以降低稳态工作负载的成本。第三,您需要支付相当于 EC2 按需实例价格 15% 的计算管理费用,以涵盖 AWS 对您实例的运营管理。请注意,与传统的 Lambda 函数不同,您无需为每个请求的执行时长单独付费。多并发功能通过减少处理请求所需的总计算时间来帮助进一步优化成本。
初始版本支持最新版本的 Node.js、Java、.NET 和 Python 运行时,对其他语言的支持即将推出。该功能与现有的 Lambda 工作流程集成,包括函数版本控制、别名、AWS CloudWatch Lambda Insights、AWS AppConfig 扩展以及 AWS SAM 和 AWS CDK 等部署工具。您可以将现有的 Lambda 函数迁移到 Lambda 托管实例,而无需更改函数代码(只要已验证其在多并发环境下是线程安全的),从而可以轻松地为受益于专用计算或成本优化的工作负载采用此功能。
Lambda 托管实例代表了 Lambda 功能的重大扩展,这意味着您可以在保持无服务器操作模型的同时运行更广泛的工作负载。无论您是在优化高流量应用程序的成本,还是希望访问 Graviton4 等最新处理器架构,这项新功能都能在不增加操作复杂性的情况下提供您所需的灵活性。我们期待看到您使用 Lambda 托管实例构建的成果。