【问题标题】:AWS Lambda .NET Using External LibrariesAWS Lambda .NET 使用外部库
【发布时间】:2018-09-16 11:12:32
【问题描述】:

我是 AWS 的新手,但已经尝试过编写和部署简单的 .NET Core 2.0 应用程序。

我有使用外部 c++ dll 的 .Net 4.6 应用程序。最后一个拥有大量依赖项——超过 300 MB 的其他 dll。所以我尝试使用 Lambda 在 AWS 上部署这些东西。

起初我创建了简单的 AWS Lambda 项目,并尝试使用以下方法编写逻辑

public async Task<string> FunctionHandler(S3Event evnt, ILambdaContext context) { ... }

但在部署过程中我遇到了错误 - 它只允许使用 Lambda 部署约 65MB 的内容。

后来我创建了 AWS 无服务器应用程序 - 因为可以使用 WebAPI,所以效果要好得多(将来对我来说使用它会很有用)。我已经开始在public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction 类中创建逻辑,添加处理函数: public async Task<string> FunctionHandlerAsync(JObject param, ILambdaContext context) { ... }

第一个麻烦是 JObject - 解析它以获取 Bucket 和 Object 键是很糟糕的。仍然是部署内容的限制 - 已经 ~250MB。修复已完成 - 我已将所有依赖项和 .exe 文件放入 .zip 并在 LambdaEntryPoint 初始化期间将其解压缩到 \tmp 文件夹。这是正确的,没有问题。但后来我尝试使用以下代码启动 .exe 文件:

 var process = new System.Diagnostics.Process();
        process.StartInfo.FileName = "Photolemur Console.exe";
        process.StartInfo.WorkingDirectory = @"\tmp";
        process.StartInfo.Arguments = $"\"{inboxPath}\" \"{outboxPath}\"";
        process.Start();

        process.WaitForExit();

而且我遇到了 FileNotFound 异常。所以问题如下-

是否可以使用 AWS lambda 函数来做这样的事情?我知道我可以通过虚拟窗口安装来提升 EC2。但这是正确的方式吗?您对 AWS .NET 的总体看法如何?我应该继续我的研究还是探索 Microsoft Azure Functions 的更简单方法?

PS:仅使用我在 AWS 的 C++ 库来完成此类工作是否有一些不错的解决方案?

【问题讨论】:

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


    【解决方案1】:

    这是 IMO 不值得努力的。 Lambda 函数在 Linux 容器中执行,因此运行 Windows .exe 将需要 Wine,它是 possible,但痛苦并进一步增加了 lambda 应用程序的大小,并且您可能会很快用完 /tmp (512MB)。

    lambda 应用程序 (50MB) 的大小限制也存在一个原因:它允许 AWS 基础设施根据需要快速增加和减少实例数量。绕过这个限制会破坏 AWS lambda 的这一优势。

    我不知道您的应用程序的扩展/延迟/使用需求,但在我看来,使用常规 EC2 实例更合适。性能与 AWS Lambda 相当的实例非常便宜,因此唯一的缺点是您必须自己管理它们。

    【讨论】:

      猜你喜欢
      • 2017-05-16
      • 2021-09-13
      • 1970-01-01
      • 2021-12-07
      • 2017-12-24
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      相关资源
      最近更新 更多