我正在尝试在AWS lambda中运行dotnet核心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 app和nodejs文件 - index.js的zip文件创建了一个Lambda函数。当我测试lambda函数时,我收到如下错误:
{
"errorMessage": "Command failed: /bin/sh -c ./hwapp\n",
"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而不是亚马逊Linux上构建了dotnet应用程序,但我真的不确定......有人可以帮助我吗?
感谢。
答案 0 :(得分:1)
我有完全相同的错误。我怀疑这是因为二进制文件是在Ubuntu上编译的,而不是在Amazon Linux上编译的。
我还设置了亚马逊Linux,AWS Lambda(基于Red Hat)实际运行。但是,构建不成功。这是我收到的错误消息:
[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]$
消息说在撰写本答案时(2016-5-6),有些依赖项还不支持RHEL。我们可能要等到依赖包支持。
答案 1 :(得分:1)
您可能还遇到了一个问题,即zip上传到lambda的可执行文件未分配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
]
}
}
答案 2 :(得分:0)
虽然我无法对.net核心发表评论,但我在lambda中以同样的方式使用golang,并且能够在ubuntu上编译它并在lambda上运行它就好了。我必须在编译之前设置这些参数,然后它才能工作: 设置GOOS = linux 设置GOARCH = amd64