[英]error executing dotnet core 1.0 console app from nodejs in AWS lambda
我正在嘗試在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應用程序,但我真的不確定......有人可以幫幫我嗎?
謝謝。
我有完全相同的錯誤。 我懷疑這是因為二進制文件是在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]$
消息說,在撰寫本答案時,有些依賴項還不支持RHEL(2016-5-6)。 我們可能要等到依賴包支持。
您可能還遇到了一個問題,即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
]
}
}
雖然我無法對.net核心發表評論,但我在lambda中以同樣的方式使用golang,並且能夠在ubuntu上編譯它並在lambda上運行它就好了。 我必須在編譯之前設置這些參數然后工作:設置GOOS = linux設置GOARCH = amd64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.