亚马逊AWS官方博客

推出 AWS Lambda Managed Instances:兼具无服务器简便性和 EC2 灵活性



今天,我们宣布推出 AWS Lambda Managed Instances,这是一项新功能,允许您在 Amazon Elastic Compute Cloud(Amazon EC2)的计算资源上运行 AWS Lambda 函数,同时保留无服务器架构的运维简化优势。此增强功能可满足了客户的关键需求:在不牺牲您熟悉和喜爱的无服务器开发体验的情况下,访问专业的计算选项并优化稳态工作负载的成本。

尽管 Lambda 消除了基础设施管理的负担,但部分工作负载仍然需要专用硬件(如特定 CPU 架构),或者需要通过 Amazon EC2 的购买承诺实现成本优化。这种需求矛盾迫使许多团队不得不自行管理基础设施,为了获取所需的计算选项或定价模式而放弃 Lambda 的无服务器优势。这往往会导致重大的架构调整和更重的运维责任。

Lambda Managed Instances
借助 Lambda Managed Instances,您可以定义 Lambda 函数在 EC2 实例上的运行方式。Amazon Web Services(AWS)会在您的账户中处理这些实例的设置和管理。您可以访问最新一代的 Amazon EC2 实例,AWS 会处理所有运维复杂工作 — 包括实例生命周期管理、操作系统补丁更新、负载均衡和自动扩缩。这意味着您可以根据具体工作负载需求选择优化后的计算配置文件(例如为数据密集型应用选择高带宽网络配置),而无需承担管理 Amazon EC2 基础设施的运维负担。

每个执行环境可以同时处理多个请求,而不是一次仅处理一个请求。这能显著降低计算消耗,因为您的代码可以在并发请求间高效共享资源,而不是为每次调用启动独立的执行环境。此外,Lambda Managed Instances 支持 Amazon EC2 基于承诺的定价模式(如计算类节省计划预留实例),与 Amazon EC2 按需定价相比,最高可节省 72% 的成本。这使稳态工作负载能够在保持熟悉的 Lambda 编程模型的同时,实现显著的成本优化。

操作演示
要体验 Lambda Managed Instances,首先需要创建一个容量提供程序。如下图所示,导航窗格中的其他资源下有一个用于创建这些资源的新选项卡。

Lambda Managed Instances 控制台

我在“创建容量提供程序”步骤中指定虚拟私有云(VPC)、子网配置和安全组。通过容量提供程序配置,我还可以告知 Lambda 在哪里部署和管理实例。

我可以指定想要包含或排除的 EC2 实例类型,也可选择包含所有实例类型以实现高度多样性。此外,我可以指定一些与自动扩缩相关的控件,包括最大 vCPU 数量,以及是否要使用自动缩放或 CPU 策略。

配置容量提供程序后,我可以在创建新的 Lambda 函数时通过其 Amazon 资源名称(ARN)选择它。在这里,我还可以选择想要的内存分配以及内存与 vCPU 的比率。

使用 Lambda Managed Instances
现在我们已经了解了基本设置,接下来让我们更详细地探讨 Lambda Managed Instances 的工作原理。该功能可将 EC2 实例组织为容量提供程序,您可以通过 Lambda 控制台AWS 命令行界面(AWS CLI)基础设施即代码(IaC)工具(如 AWS CloudFormationAWS 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 Managed Instances。该功能已在美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、亚太地区(东京)和欧洲地区(爱尔兰)推出。有关区域可用性和未来路线图,请访问按区域列出的 AWS 功能。在 AWS Lambda 文档中了解更多信息。

Lambda Managed Instances 的定价包含三个组成部分。首先,您需要支付每百万次调用 0.20 美元的标准 Lambda 请求费用。其次,您需要为预置的计算容量支付标准的 Amazon EC2 实例费用。您现有的 Amazon EC2 定价协议(包括计算类节省计划和预留实例)可以应用于这些实例费用,以降低稳定状态工作负载的成本。第三,您需要按 EC2 按需型实例价格收取 15% 的计算管理费,用于覆盖 AWS 对实例的运维管理成本。请注意,与传统 Lambda 函数不同,您无需为每次请求的执行时长单独付费。多并发功能可减少处理请求所需的总计算时间,从而进一步优化成本。

初始版本支持 Node.js、Java、.NET 和 Python 运行时的最新版本,对其他语言的支持功能将陆续推出。该功能可与现有 Lambda 工作流(包括函数版本控制、别名、AWS CloudWatch Lambda InsightsAWS AppConfig 扩展,以及 AWS SAM 和 AWS CDK 等部署工具)无缝集成。您可以将现有 Lambda 函数迁移到 Lambda Managed Instances,而无需更改函数代码(前提是已验证代码具备多并发线程安全性),让需要专用计算资源或成本优化的工作负载能够轻松采用此功能。

Lambda Managed Instances 大大扩展了 Lambda 的功能,使您能够在保留无服务器运维模型的同时,运行更广泛的工作负载。无论您是要优化高流量应用的成本,还是要使用 Graviton4 等最新处理器架构,这一全新功能都能在无额外运维复杂性的前提下,为您提供所需的灵活性。我们期待看到您借助 Lambda Managed Instances 构建更多内容。