簡體   English   中英

從AWS lambda中的nodejs執行dotnet core 1.0控制台應用程序時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM