amazon-web-services - 在哪里可以找到 AWS Lambda 的 dotnetcore3.1 运行时的源代码?
问题描述
AWS 在 GitHub 上发布了很多他们的源代码,但到目前为止我还没有找到 dotnetcore3.1 Lambda Runtime 的源代码。
我希望这个源将是一个负责启动和 IoC 的控制台应用程序(使用 Lambda 配置来确定处理程序类和函数,使用反射来实例化处理程序,以及在 lambda 的程序集属性上指定的序列化程序)。到目前为止,我已经找到了许多包含 NuGet 库和 dotnet CLI 工具之类的存储库,但还没有找到运行时本身。
AWS Lambda dotnetcore3.1 运行时源是否公开可用?你能指出我的回购和.csproj吗?谢谢!
解决方案
我不是 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 人员的开发。
推荐阅读
- flutter - Flutter 搜索列表视图中显示的数据
- node.js - Sequelize:如何将我的解密值与 req.body 进行比较
- javascript - Gatsby + Markdown:GraphQL 查询呈现为组件,但在导入页面时不呈现
- visual-c++ - 创建调度对象时,PowerPoint 自动化将引发“错误 -2147467259”
- openvino - 使用 openvino 混合构建的 onnxruntime 发生错误“加载库失败”
- visual-studio - VsVim: 错误: %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l 显示在编辑器窗口下
- javascript - clearInterval 不起作用(已按照其他问题中的步骤操作)
- prolog - 在语法规则列表而不是原子列表上调用短语/2
- javascript - 如何进行 if else 条件检查
- git - Git在提交时没有将行尾转换为LF