lambchop 0.0.2: Invoke AWS Lambda function from local as normally script

AWS LambdaのLimited Previewが使えるようになったので、デバッグ用にローカルからさくさく実行できるツールを作ってみた。

lambchop 0.0.2

https://github.com/winebarrel/lambchop

shebangに「#!/usr/bin/env lambchop」と書いておくと、マジックコメントを読み込んで中身のスクリプトAWS Lambdaにアップロードして、CloudWatchLogsにイベントが書き込まれたら標準出力にメッセージを出力する…というもの。

スクリプトの中身は以下のような感じ。

#!/usr/bin/env lambchop
/*
function_name: test
runtime: nodejs
role: arn:aws:iam::NNNNNNNNNNNN:role/lambda_exec_role
handler: test.handler
mode: event
description: ''
timeout: 3
memory_size: 128
*/
console.log('Loading event');

exports.handler = function(event, context) {
    console.log('value1 = ' + event.key1);
    console.log('value2 = ' + event.key2);
    console.log('value3 = ' + event.key3);
    context.done(null, 'Hello World');  // SUCCESS with message
};

これを実行スクリプトとして実行すると、中身がアップロードされてログ出力を待つ。

$ export AWS_REGION=us-east-1
$ ./test.js
Function was uploaded:
{
  "function_name": "test",
  "function_arn": "arn:aws:lambda:us-east-1:NNNNNNNNNNNN:role:function:test",
  "configuration_id": "92ae8021-a6c3-4fcc-9684-282d3f4e72cb",
  "runtime": "nodejs",
  "role": "arn:aws:iam::NNNNNNNNNNNN:role/lambda_exec_role",
  "handler": "test.handler",
  "mode": "event",
  "code_size": 272,
  "description": "",
  "timeout": 3,
  "memory_size": 128,
  "last_modified": "2014-11-23 17:43:58 +0900"
}
(イベント待ち…)

他のターミナルを開いて付属のlambchop-catでサンプルイベントを送ってやると

echo '{"key1":101, "key2":201, "key3":301}' | lambchop-cat test

test.jsを立ち上げている端末にはFunctionのログが出力される。

(イベント待ち…)
2014-11-23T08:45:32.732Z  48p3jzf4z1vmz3is    Loading event
START RequestId: 18f76777-72ed-11e4-bf1c-db8a8f474c8d
2014-11-23T08:45:32.830Z  18f76777-72ed-11e4-bf1c-db8a8f474c8d    value1 = 101
2014-11-23T08:45:32.830Z  18f76777-72ed-11e4-bf1c-db8a8f474c8d    value3 = 301
2014-11-23T08:45:32.830Z  18f76777-72ed-11e4-bf1c-db8a8f474c8d    value2 = 201
END RequestId: 18f76777-72ed-11e4-bf1c-db8a8f474c8d
REPORT RequestId: 18f76777-72ed-11e4-bf1c-db8a8f474c8d  Duration: 116.71 ms Billed Duration: 200 ms    Memory Size: 128 MB    Max Memory Used: 9 MB

既存のFunctionをダンプすることもできる。

$ lambchop-dump  test
#!/usr/bin/env lambchop
/*
function_name: test
runtime: nodejs
role: arn:aws:iam::NNNNNNNNNNNN:role/lambda_exec_role
handler: test.handler
mode: event
description: ''
timeout: 3
memory_size: 128
*/
console.log('Loading event');

exports.handler = function(event, context) {
    console.log('value1 = ' + event.key1);
    console.log('value2 = ' + event.key2);
    console.log('value3 = ' + event.key3);
    context.done(null, 'Hello World');  // SUCCESS with message
};

デモ

これでだいぶトライ・アンド・エラーがしやすくなった気がする…

どうぞご利用ください。

2014/11/23 20:50 追記

node_modulesをサポートしました。

スクリプトと同じディレクトリに node_modules/ があると一緒にアップロードされます。