C# 为什么我们要在一个Lambda函数中托管一个.NET核心Web应用程序?

C# 为什么我们要在一个Lambda函数中托管一个.NET核心Web应用程序?,c#,amazon-web-services,asp.net-web-api,lambda,asp.net-core,C#,Amazon Web Services,Asp.net Web Api,Lambda,Asp.net Core,我一直在阅读Amazon Lambda,并尝试创建要使用的web API。我的理解是,通过创建每个函数,我们可以创建一个指向该函数的资源,并且每个函数都独立于任何其他函数。如果我们想使用共享库,我们可以在函数本身中这样做,或者让API网关调用一个中介函数,然后该中介函数将适当的请求代理给最终函数以创建响应 由于添加了一个可以托管在AWS Lambda上的web API解决方案,为什么我们要在Lambda上托管一个完整的web应用程序,而EC2实例可以提供更多的控制,如果我们只是要部署整个应用程序

我一直在阅读Amazon Lambda,并尝试创建要使用的web API。我的理解是,通过创建每个函数,我们可以创建一个指向该函数的资源,并且每个函数都独立于任何其他函数。如果我们想使用共享库,我们可以在函数本身中这样做,或者让API网关调用一个中介函数,然后该中介函数将适当的请求代理给最终函数以创建响应


由于添加了一个可以托管在AWS Lambda上的web API解决方案,为什么我们要在Lambda上托管一个完整的web应用程序,而EC2实例可以提供更多的控制,如果我们只是要部署整个应用程序?

我将Lambda用于我的一个.NET核心web API项目,到目前为止似乎还可以。主要好处是:

  • 非常容易部署到不同的环境/阶段
  • 不必担心服务器和负载平衡器
  • 如果应用程序的使用率不高(即不需要全天候运行服务器),可能会更经济高效如果前面有一个缓存(您可能会使用API网关缓存),这也是事实
目前我能想到的唯一负面的事情是ASPNET的启动时间。点击一个cold端点可能需要约5秒的时间,如果它需要大量的程序集,并且您正在运行一个小型Lambda(即256MB)

对于小型项目(通常是儿童学校的志愿项目),我通常可以停留在免费层,特别是如果我使用数据存储所用的DynamoDB。对于性能要求更高的工作,我将它们部署到EC2的自动伸缩组中

我真正喜欢将AWS模板用于“ASP.Net核心Web API”的地方是,我可以将其开发为控制台应用程序,然后将其构建并部署到EC2或无服务器Lambda项目(有时两者兼而有之)

为了简单起见,我确实将所有Web API函数构建到一个应用程序中。这将是部署到EC2时的标准。作为Lambda部署时会有一些负面影响,因为并非所有函数都需要相同的资源,因此您必须为Lambda提供所需的最大资源,即使大多数调用都可以在资源最少的情况下正常运行。为了更有效地使用Lambdas,可能会将它们分解为几个项目,以部署到不同大小(小型、中型、大型)的Lambdas,但是我必须维护3个项目,而不是一个


希望这有助于更多阅读:然后更多:因为lambda不适合呈现UI的web应用程序。但它更适合于WebAPI类型的应用程序,这些应用程序没有任何状态管理,处理http请求并以简单格式(如json或xml)返回响应。您获得的优势是无塞尔维亚部署,您不需要担心维护物理服务器。不用担心修补它们和空间问题。监控是现成的,称为PaaS(平台即服务)。你只需运行你的应用程序,不必担心在哪里或如何发生。Amazon负责创建服务器、使其保持最新、分配负载、优化内存和CPU利用率等。您所担心的只是应用程序,这是应该的。