首页 > 解决方案 > 在哪里可以找到 AWS Lambda 的 dotnetcore3.1 运行时的源代码?

问题描述

AWS 在 GitHub 上发布了很多他们的源代码,但到目前为止我还没有找到 dotnetcore3.1 Lambda Runtime 的源代码。

我希望这个源将是一个负责启动和 IoC 的控制台应用程序(使用 Lambda 配置来确定处理程序类和函数,使用反射来实例化处理程序,以及在 lambda 的程序集属性上指定的序列化程序)。到目前为止,我已经找到了许多包含 NuGet 库和 dotnet CLI 工具之类的存储库,但还没有找到运行时本身。

AWS Lambda dotnetcore3.1 运行时源是否公开可用?你能指出我的回购和.csproj吗?谢谢!

标签: amazon-web-services.net-coreaws-lambda

解决方案


我不是 100% 确定,但可能没有什么比公开可用的专用“.NET Core 运行时”更好的了。

让我们探索一下 Lambda 是如何工作的,以解释我为什么这么认为:

首先有一个带有主机操作系统的 EC2 实例。那是您的资源来自的裸机(vCPU、RAM、磁盘等)。

其次,microVM 有一个精简的管理层。对于 AWS Lambda,这是一个名为Firecracker的项目。

启动的 microVM 使用微内核。对于 AWS Lambda,它是OSv微内核。微内核已经对运行时提供了一些支持:

OSv 支持许多托管语言运行时,包括未修改的 JVM、Python 2 和 3、Node.JS、Ruby、Erlang 以及直接编译为本机机器代码的语言,如 Golang 和 Rust。

.NET Core 是经过编译的,所以我认为这属于同一类别。它是一个“本机”二进制文件,它是自包含的并且刚刚启动。

您提到了反射等来运行二进制文件。我认为这并不复杂。这是最后一块拼图:环境变量

有一堆环境变量是由“运行时”设置的。您可以在 AWS 文档中找到完整列表:定义的运行时环境变量

每个 Lambda 都有一个名为的环境变量_HANDLER,它指向处理程序。在您的情况下,这将是二进制文件。这将允许运行时“运行”您的处理程序。

当处理程序运行时,底层 AWS SDK 正在启动某种网络服务器/套接字(我认为它取决于框架/语言),它公开了“标准”运行时与您的代码通信所需的一切。

据我所知,实际上并没有专门的 .NET Core 运行时。它一直都很通用,我猜这简化了 AWS 人员的开发。


推荐阅读