【问题标题】:error executing dotnet core 1.0 console app from nodejs in AWS lambda在 AWS lambda 中从 nodejs 执行 dotnet core 1.0 控制台应用程序时出错
【发布时间】:2016-04-20 15:28:05
【问题描述】:

我正在尝试在 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 ./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 而不是 Amazon Linux 上构建 dotnet 应用程序,但我真的不确定......有人可以帮助我吗?

谢谢。

【问题讨论】:

  • 你有没有得到这个工作?

标签: .net node.js amazon-web-services asp.net-core aws-lambda


【解决方案1】:

我遇到了完全相同的错误。我怀疑这是因为二进制文件是在 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]$

消息说,在撰写此答案 (2016-5-6) 时,某些依赖项尚不支持 RHEL。我们可能必须等到依赖包支持。

【讨论】:

    【解决方案2】:

    您可能还会遇到问题,即上传到 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
                ]
            }
        }
    

    【讨论】:

      【解决方案3】:

      虽然我不能评论 .net 核心,但我在 lambda 中使用 golang 的方式相同,并且能够在 ubuntu 上编译它并在 lambda 上运行它就好了。我必须在编译之前设置这些参数,然后它才能工作: 设置 GOOS=linux 设置 GOARCH=amd64

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 2018-02-09
        相关资源
        最近更新 更多