在 AWS lambda 中从 Nodejs 执行 dotnet Core 1.0 控制台应用程序时出错



我正在尝试在 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

相关内容

最新更新