AWS Lambdaでのネイティブコード実行
なんと、まだ日本にいます。12月下旬からなので既に2ヶ月以上。流石にそろそろ帰米します。
さて、AWS lambdaのこと。
Lambda Execution Environment and Available Libraries - AWS Lambda
If you are using any native binaries in your code, make sure they are compiled in this environment. Note that only 64-bit binaries are supported on AWS Lambda.
公式のドキュメントの冒頭、初め何を言ってるのか分からなかった。ネイティブバイナリって何のことだろうかと。
調べると要はLambdaの設置Zipパッケージの中にネイティブバイナリを置いておいて、Pythonやnode.jsで書いたLambda関数から呼べるということでした。スピンアップ効率にはちょっと疑問あるけど、腹に抱えこんでさえいればコマンド叩けるんだね。
hugo-lambda/RunHugo.js at bb3709a27a0c19fd6bdfb712305a8ecfdc4c3a59 · ryansb/hugo-lambda · GitHub
function runHugo(next) { console.log("Running hugo"); var child = spawn("./hugo", ["-v", "--source=" + tmpDir, "--destination=" + pubDir], {}); child.stdout.on('data', function (data) { console.log('hugo-stdout: ' + data); }); child.stderr.on('data', function (data) { console.log('hugo-stderr: ' + data); }); child.on('error', function(err) { console.log("hugo failed with error: " + err); next(err); }); child.on('close', function(code) { console.log("hugo exited with code: " + code); next(null); }); },
この例示で抱え込まれている「hugo」はGoで書かれているOSSなので、LambdaがGoに対応した今ではもっと直接的なアプローチにも道が開きましたが、これは一つのベストプラクティスだと思う。