【发布时间】: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