2016-04-20 4 views
3

Ich versuche, eine Dotnet-Core-1.0-App in AWS Lambda zu betreiben. Dies ist nur etwas, das ich aus Interesse gemacht habe, aber ich habe ein paar Probleme bekommen.Fehler beim Ausführen von Dotnet Core 1.0 Konsolen-App von Nodejs in AWS Lambda

meine Dotnet Kern app sieht wie folgt aus:

using System; 

namespace ConsoleApplication 
{ 
    public class Program 
    { 
     public static int Main(string[] args) 
     { 
      Console.WriteLine("Hello from dotnet!"); 
      return 0; 
     } 
    } 
} 

ich die Dotnet-App auf Ubuntu 14.04 kompiliert mit:

dotnet build --native --output out --framework dnxcore50 

Das gibt mir eine native App, die ich auf Linux laufen kann. Das alles funktioniert!

Von hier wollte ich sehen, ob ich das in AWS Lambda laufen konnte. Da Lambda nicht Dotnet nicht unterstützt, fand ich einige NodeJS meiner Dotnet App ausführen:

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); 
}; 

ich durch Hochladen einer ZIP-Datei mit meinem Dotnet Kern 1.0 App und die NodeJS Datei, die eine Lambda-Funktion erstellt - index.js. Wenn ich testen Sie die Lambda-Funktion ich einen Fehler bin immer wie folgt:

{ 
    "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)" 
    ] 
} 

ich versucht habe ziemlich viele verschiedene Dinge, aber ich bin fest. Ich denke es könnte aufgrund der Aufbau der Dotnet-App auf Ubuntu und nicht Amazon Linux sein, aber wirklich bin ich mir nicht sicher ... Kann mir jemand helfen?

Danke.

+0

Haben Sie jemals diese Arbeit bekommen? –

Antwort

1

Ich hatte genau den gleichen Fehler. Ich vermute, das liegt daran, dass die Binärdatei auf Ubuntu kompiliert wurde, nicht auf Amazon Linux.

Ich habe auch Amazon Linux, dass AWS Lambda (basierend auf Red Hat) tatsächlich läuft auf. Die Erstellung war jedoch nicht erfolgreich. Hier ist die Fehlermeldung, die ich habe:

[[email protected] 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-us[email protected] helloworld]$ 

Mitteilung sagt, dass einige Abhängigkeiten nicht unterstützt RHEL noch zum Zeitpunkt des Schreibens dieser Antwort (2016.05.06). Möglicherweise müssen wir warten, bis abhängige Pakete unterstützt werden.

0

Obwohl ich nicht kommentieren kann .net Kern, ich benutze Golang in Lambda die gleiche Weise, und war in der Lage, es auf Ubuntu zu kompilieren und es auf Lambda laufen gut. Ich hatte diese params setzen vor dem Kompilieren und es funktionierte dann: Satz GOOS = linux Satz GOARCH = amd64

1

Sie auch in ein Problem laufen können, wenn die ausführbare Datei in Ihrem Zip-Lambda hochgeladen nicht zugewiesen wird die Linux ausführen Genehmigung. Sie können Ihren Kindprozess nicht erstellen und ohne diese Berechtigung ausführen.

Leider ist dies mit Standard-Zip-Dienstprogrammen, die unter Windows verfügbar sind, schwer zuzuordnen. Also, wenn Sie Ihre Bereitstellung zip auf einem Windows-Rechner bauen, könnte man sich ein Grunzen/Grunzen-contrib-Kompresse bei Verwendung und ein Grunzen Konfiguration, die ähnlich aussieht:

compress: { 
     main: { 
      options: { 
       archive: 'dist/lambda.zip' 
      }, 
      files: [ 
       ... 
       {src: 'pathToExecutable', mode: 777} //this mode sets the execute flag 
      ] 
     } 
    }