我是AWS的新手,但已经尝试过编写和部署简单的.NET Core 2.0应用程序。
我有.Net 4.6应用程序,它使用外部c ++ dll。最后一个拥有它拥有大量的依赖 - 超过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 Exception。所以问题如下 -
是否可以使用AWS lambda函数执行此类操作?我知道我可以通过虚拟Window安装升级EC2。但这是对的吗?您对AWS .NET的看法如何?我应该继续我的研究,还是可以更容易地探索Microsoft Azure功能?
PS:在AWS上使用我的C ++库进行此类工作是不是很好的解决方案?
答案 0 :(得分:0)
这是IMO不值得的努力。 Lambda函数在Linux容器中执行,因此运行Windows .exe 将需要Wine,这是possible,但是痛苦并且进一步增加了lambda应用程序的大小,你可能很快就会耗尽空间 / tmp (512MB)。
还存在lambda应用程序的大小限制(50MB),原因如下:它允许AWS基础架构根据需要快速扩展和缩小实例数。绕过这种限制会破坏AWS lambda的这一优势。
我不知道您的应用程序的扩展/延迟/使用需求,但使用常规EC2实例似乎更适合我。性能与AWS Lambda相当的实例非常便宜,因此唯一的缺点是您必须自己管理它们。