【问题标题】:Can we write C# console application and ASP.NET Core MVC web application using AWS Lambda我们可以使用 AWS Lambda 编写 C# 控制台应用程序和 ASP.NET Core MVC Web 应用程序吗
【发布时间】:2021-12-03 05:54:57
【问题描述】:

我对 AWS Lambda 有点陌生,我不确定它是否是一个部署框架,我们可以在其中托管 ASP.NET Core MVC Web 应用程序?或者可以调用 .NET Core 控制台应用程序?它是一个托管服务。例如,目前我们有以下 2 个主要组件:-

  1. 使用 Windows 任务调度程序按计划运行的 ASP.NET Core 控制台应用程序。

  2. ASP.NET Core MVC Web 应用程序托管在 IIS 内以托管一些 API 端点。

所以如果我们想使用 AWS Lambda,在上面的 2 个组件中,它将替换哪个部分?例如对于第一点,它会取代控制台应用程序还是 Windows 任务调度程序?对于第二点,它会取代 ASP.NET Core MVC Web 应用程序还是 IIS?或者 AWS Lambda 不会替代任何东西,但会/可以与上述组件集成?

提前感谢您的帮助。抱歉,如果我对 AWS Lambda 了解不多。

【问题讨论】:

  • 我猜您的控制台应用正在访问本地资源,例如本地文件夹或本地服务中的文件?挑战之一是获得从 AWS 计算到本地资源的网络连接。因此,即使您可以运行您的控制台应用程序,您也需要考虑您可以将这个过程中的多少迁移到云端
  • @Nick.McDermaid 控制台应用程序将使用客户端对象模块与 SharePoint Online 集成 + 将与本地 3rd 方系统集成..因此在我们的案例中没有任何连接问题..跨度>
  • 那么本地3rd 方系统也是公有云服务?听起来您需要简单地进入并开始试验。
  • 如果您正在编写 MVC 应用程序,则无需使用 AWS Lambda 函数来调用 AWS 服务。您可以使用适用于 .NET 的 AWS 开发工具包从 NET 类调用许多 AWS 服务。

标签: amazon-web-services asp.net-core iis aws-lambda


【解决方案1】:

编辑:我错误地认为 C# 需要自定义 docker 映像。事实并非如此,Lambda 中提供了 C# 的图像

理论上,您可以在 MVC 应用程序中将 lambdas 设为您的控制器 - 事实上,这样做实际上是一个很好的设计决策。然而,鉴于 ASP 的性质,这在第一次时可能会变得有点棘手。它们必须位于 API 端点之后,但只需在配置中做一些工作,您就可以跨 lambda 分发控制器。

计划任务也非常适合 lambda,但同样 - 不是 c# 原生的。

AWS 中没有任何默认的 Windows 映像。老实说,如果你打算做一个 c# ASP 应用程序,你可能想要考虑 Azure,因为它与 C# 和 ASP 交互,你必须在 AWS 中一起破解选项

【讨论】:

  • 感谢您的回复...但我仍然不确定这些要点For example for the first point, will it replace the Console application or the windows task scheduler? and for the second point, will it replace the ASP.NET Core MVC web application or IIS? Or AWS Lambda will not replace any thing but will/can integrate with the above components?你能建议吗?
  • "但是你必须使用自定义 docker"?此页面没有提及 Docker,docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/… 此外,如果您声称“C# 还不是 lambdas 的本地语言”,您最好提供更多证据,因为官方 AWS 文档确实将 C# 呈现为与其他任何语言一样的本地语言。
  • 我的立场是正确的 - 我使用的是过时的信息。我会相应地编辑我的答案
  • @johnGu 很可能它会集成,而不是替换 - 但我相信如果你正确编写挂钩,完全可以使用 Lambda(或其他类似 Azure Functions)来替换其中的一些组件。我不知道该怎么做,但应该可以。
【解决方案2】:

简而言之,AWS Lambda 或 Azure Functions 是基于云的解决方案的特殊类型的应用程序模型,而不是传统的控制台或 Web 应用程序。不要试图将它们相互关联,因为它们有很大的不同。

此类云应用不会很快取代传统应用模型,因为并非所有人都在迁移到云。

例如,如果您想在 AWS 上安排作业,那么Lambda and CloudWatch can work together

但是,要在 AWS 上托管 REST API,您确实有多种选择,例如

【讨论】:

  • 感谢有用的回复...现在我们的客户想要使用 AWS Lambda,而我建议使用 ASP.NET 核心控制台应用程序来实现这些功能(用于运行计划作业 + 长时间运行的进程) + ASP.NET Core MVC(用于托管 API 端点)......所以我应该将我提议的功能更改为完全被 AWS Lambda 取代吗?第二个问题;我可以在 AWS Lambda 中编写后台作业 + REST API 端点吗?如果答案是肯定的,那么我可以使用 ASP.NET 在 Lambda 中编写这些吗?
  • @johnGu 您仍然以传统思维方式攻击需求,这会阻止您使用原生云服务。例如,传统应用程序模型中的调度作业(长时间运行的代码)非常适合作为 Windows 服务(不是控制台应用程序),但它们非常适合 AWS Lambda 或 Azure Functions,因为云服务允许您在多个方式(例如计时器)。但是,在云上托管 REST API 过于灵活,您可以使用 AWS Lambda/Azure Functions(由 HTTP 请求触发)或传统的 Web 应用程序模型。
  • @johnGu 更新了答案,包括对有关计划作业和 REST API 的 AWS 文档的多个参考。
  • @Lexi Li 我正在阅读有关 Lambda 的更多信息,并且有很多文章说 Lambda 不适合长时间运行的进程,因为它们会在 15 分钟后重新启动。这是正确的吗?
  • @johnGu 这是正确的——它们的运行时间很短。但想法是它们是由事件触发的——如果你想使用无服务器云计算,你必须考虑一个事件驱动的结构——事件触发并触发更小的组件来操作。 “长期运行”可能意味着很多事情。如果您的应用程序有很多按顺序运行的组件,您可以将它们划分为不同的 lambda 并触发……很多事情。数据库更新,s3 插入等。云原生架构是一个非常不同的游戏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
相关资源
最近更新 更多