我正在尝试在 AWS lambda 中运行 dotnet core 1.0 控制台应用程序。这只是我出于兴趣而做的事情,但是我遇到了一些问题。
我的 dotnet 核心应用如下所示:
using System;
namespace ConsoleApplication
{
public class Program
{
public static int Main(string[] args)
{
Console.WriteLine("Hello from dotnet!");
return 0;
}
}
}
我在 Ubuntu 14.04 上编译了 dotnet 应用程序:
dotnet build --native --output out --framework dnxcore50
这给了我一个可以在Linux上运行的本机应用程序。这一切都有效!
从这里开始,我想看看我是否可以在 AWS lambda 中运行它。由于lambda不支持dotnet,我找到了一些nodejs来执行我的dotnet应用程序:
var exec = require('child_process').exec;
exports.handler = function(event, context) {
console.log('Hello from nodejs!');
child = exec("./hwapp", function(error) {
context.done(error, 'done');
});
child.stdout.on('data', console.log);
child.stderr.on('data', console.error);
};
我通过上传一个包含我的 dotnet core 1.0 应用程序和 nodejs 文件 - index.js 的 zip 文件创建了一个 Lambda 函数。当我测试 lambda 函数时,我收到如下错误:
{
"errorMessage": "Command failed: /bin/sh -c ./hwappn",
"errorType": "Error",
"stackTrace": [
"",
"ChildProcess.exithandler (child_process.js:213:12)",
"emitTwo (events.js:87:13)",
"ChildProcess.emit (events.js:172:7)",
"maybeClose (internal/child_process.js:821:16)",
"Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)"
]
}
我尝试了很多不同的东西,但我被卡住了。我想这可能是由于在 Ubuntu 而不是 Amazon Linux 上构建 dotnet 应用程序,但实际上我不确定......有人可以帮助我吗?
谢谢。
我遇到了完全相同的错误。我怀疑这是因为二进制文件是在Ubuntu上编译的,而不是在Amazon Linux上编译的。
我还设置了 AWS Lambda(基于 Red Hat)实际运行的 Amazon Linux。但是,构建并不成功。这是我收到的错误消息:
[ec2-user@ip-172-31-35-226 helloworld]$ sudo dotnet build
Project helloworld (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling helloworld for .NETCoreApp,Version=v1.0
/home/ec2-user/helloworld/project.json(7,31): error NU1002: The dependency Microsoft.CodeAnalysis.Common 1.2.0-beta1-20160202-02 does not support framework .NETCoreApp,Version=v1.0.
/home/ec2-user/helloworld/project.json(7,31): error NU1002: The dependency Microsoft.CodeAnalysis.CSharp 1.2.0-beta1-20160202-02 does not support framework .NETCoreApp,Version=v1.0.
/home/ec2-user/helloworld/project.json(7,31): warning NU1007: Dependency specified was Microsoft.NETCore.App >= 1.0.0-rc2-002673 but ended up with Microsoft.NETCore.App 1.0.0-rc2-23910.
Compilation failed.
1 Warning(s)
2 Error(s)
Time elapsed 00:00:00.0318055
[ec2-user@ip-172-31-35-226 helloworld]$
消息说,在撰写此答案时,某些依赖项尚不支持RHEL(2016-5-6)。我们可能需要等到依赖包支持。
您可能还会遇到一个问题,即上传到 lambda 的 zip 中的可执行文件未分配 Linux 执行权限。 如果没有此权限,您将无法生成子进程并执行它。
不幸的是,这很难用Windows上可用的标准zip实用程序进行分配。 因此,如果您在Windows计算机上构建部署zip,则可以考虑使用grunt/grunt-contrib-compress和类似于以下内容的grunt配置:
compress: {
main: {
options: {
archive: 'dist/lambda.zip'
},
files: [
...
{src: 'pathToExecutable', mode: 777} //this mode sets the execute flag
]
}
}
虽然我不能对 .net core 发表评论,但我以同样的方式在 lambda 中使用 golang,并且能够在 ubuntu 上编译它并在 lambda 上运行它。 我必须在编译之前设置这些参数,然后它就可以工作了:set GOOS=linux设置 GOARCH=amd64