AWS Lambda: 任意のシステムコマンドを実行する

Exploring The AWS Lambda Runtime Environmentが興味深かったので、任意のコマンドを実行してみた。

lambchopで以下のtest.jsを実行。

#!/usr/bin/env lambchop
/*
function_name: test
role: arn:aws:iam::123456789012:role/lambda_exec_role
handler: test.handler
timeout: 60
*/
exports.handler = function(event, context) {
  var child_process = require('child_process');

  child_process.exec(event.cmd, function(err, stdout, stderr) {
    if (!err) {
      console.log(stdout);
      console.log(stderr)
    } else {
      console.log(err);
    }

    context.done();
  })
};

コマンド名をイベントで投げる。

echo '{"cmd":"ls -la ."}' | lambchop-cat test

実行結果は以下の通り。

START RequestId: 761f28d6-7495-11e4-b6bc-3f8a8cf5cac4
2014-11-25T11:23:29.199Z  761f28d6-7495-11e4-b6bc-3f8a8cf5cac4
2014-11-25T11:23:29.198Z  761f28d6-7495-11e4-b6bc-3f8a8cf5cac4   total 12
drwxr-xr-x  2 slicer  497 4096 Nov 25 03:23 .
drwxr-xr-x 19 root   root 4096 Nov 12 19:37 ..
-rw-r--r--  1 slicer  497  299 Nov 25  2014 test.js

END RequestId: 761f28d6-7495-11e4-b6bc-3f8a8cf5cac4
REPORT RequestId: 761f28d6-7495-11e4-b6bc-3f8a8cf5cac4 Duration: 399.98 ms Billed Duration: 400 ms    Memory Size: 128 MB    Max Memory Used: 10 MB