适用于 AWS Lambda 的 .NET 8 运行时简介

适用于 AWS Lambda 的 .NET 8 运行时简介

💡 原文中文,约6900字,阅读约需17分钟。
📝

内容提要

AWS Lambda现在支持.NET 8作为托管运行时和容器基础映像,提供了API增强、改进的原生AOT支持和更好的性能。升级后的操作系统减少了部署空间占用。使用源生成器或原生AOT可以优化初始化时间和缩短冷启动时间。可以使用AWS Toolkit for Visual Studio、AWS扩展和其他工具开发Lambda函数。

🔎

延伸解读

迁移到 .NET 8 的注意事项

从 .NET 6 迁移到 .NET 8 时,需更新工具和项目文件。若使用容器镜像,必须将 Dockerfile 中的 yum 替换为 dnf,因为新基础映像基于 Amazon Linux 2023 并使用 microdnf。此外,Lambda 默认内存从 256 MB 提升至 512 MB,但建议自行测试性能,并利用 AWS Compute Optimizer 或 Lambda Power Tuning 进行分析。

原生 AOT 的收益与限制

原生 AOT 通过消除 JIT 编译,可将冷启动时间最多缩短 86%。使用 dotnet8 托管运行时部署原生 AOT 函数,能访问 .NET 系统库(如 libicu),而 provided.al2023 运行时默认不包含。但原生 AOT 并非适用于所有函数,需依赖改进的修剪支持来消除构建警告,并注意本地单元测试仍使用 JIT,可能无法捕获原生 AOT 特定的运行时错误。

性能优化与冷启动观察

初始化时间影响 Lambda 性能,可通过 System.Text.Json 源生成器或原生 AOT 优化。新运行时启动初期,由于缓存驻留减少,冷启动时间可能较长,随着使用量增加,通常几周内改善。AWS 建议在性能稳定前,不要与其他运行时进行性能比较。

❓

Q&A

AWS Lambda 支持哪些版本的 .NET?

.NET 8、C# 12、F# 8 和 PowerShell 7.4。

.NET 8 在 AWS Lambda 中有哪些性能改进?

通过原生 AOT 支持,冷启动时间最多可缩短 86%,并且默认内存大小从 256 MB 增加到 512 MB。

如何将现有的 .NET 6 函数迁移到 .NET 8?

更新工具和项目文件,将运行时设置为 dotnet8,并更新 NuGet 包到最新版本。

AWS Lambda 的新镜像使用了什么包管理器?

新镜像使用 microdnf 作为包管理器,取代了 yum。

如何使用 AWS Toolkit for Visual Studio 开发 .NET 8 Lambda 函数?

在创建新项目向导中选择 Lambda 模板,完成项目创建后可修改代码并发布到 AWS Lambda。

原生 AOT 支持对 Lambda 函数有什么影响?

原生 AOT 支持可以显著缩短冷启动时间,并提供对 .NET 系统库的访问。

🏷️

标签

➡️

继续阅读