Created
November 25, 2014 18:53
-
-
Save ThisIsMissEm/d1c456d4e235e025791d to your computer and use it in GitHub Desktop.
The better way to execute Go on Amazon Lambda (see: http://blog.0x82.com/2014/11/24/aws-lambda-functions-in-go/)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var child_process = require('child_process'); | |
exports.handler = function(event, context) { | |
var proc = spawn('./test', [ JSON.stringify(event) ], { stdio: 'inherit' }); | |
proc.on('close', function(code){ | |
if(code !== 0) { | |
return context.done(new Error("Process exited with non-zero status code")); | |
} | |
context.done(null); | |
}); | |
} |
Thanks @miksago! It's clear that I'm really not the best node developer :-) I've updated my blog with your suggestion!
Is child_process.spawn
required on line 4?
@escholtz: Yes.
This has been really helpful for me in learning how to do this, thanks for sharing. I also stumbled upon an even better way: https://github.com/jasonmoo/lambda_proc
You can now run vanilla Go on AWS Lambda, in a fast (<5ms) and clean way (log/panic)
https://github.com/eawsy/aws-lambda-go @eawsy
This feels like native Go support.. with a single file 😍
PS: No Node.js wrapper (using Python) and cgo under the hood
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The biggest issue in the original was the string concatenation in
exec
rather than usingexecFile
with an arguments array. See here for more on this vulnerability: https://blog.liftsecurity.io/2014/08/19/Avoid-Command-Injection-Node.jsHowever, here, I'm not using
execFile
either, as the expected behaviour is to have the./test
script output to thehandler.js
's standard output streams. That is, usingspawn
withstdio: 'inherit'
means that we direct the stdout / stderr / stdin of./test
to be that ofhandler.js
. I'm also correctly triggering errors for non-zero exit codes by using thecontext.done(err, msg)
syntax.