AWSのLambdaを少し調べたときに、ローカルで検証するにはどうすんだろ。って思って調べてみました。
このDockerイメージを使うと、ローカルで実行・ビルドができます。
https://github.com/lambci/docker-lambda
ファイル作成
index.js
というファイルを作成
exports.handler = (event, context) => {
console.log("event: ", event.value)
console.log("context: ", context)
return context.logStreamName
}
実行
こんなコマンドを実行します。
$ docker run --rm \
-v <code_dir>:/var/task:ro,delegated \
[-v <layer_dir>:/opt:ro,delegated] \
lambci/lambda:<runtime> \
[<handler>] [<event>]
<code_dir>
に実行したいファイル群のパスを指定し、<runtime>
に実行する環境、<handler>
に実行したいファイル名と実行する関数名、<event>
には関数の引数のevent
に渡したい値を指定します。
実際に実行するコマンド
$ docker run --rm \
-v "$PWD":/var/task:ro,delegated \
lambci/lambda:nodejs12.x \
index.handler '{ "value": "hogehoge"}'
結果
START RequestId: 3e0f4c9f-bd58-191a-a748-280fd117ca87 Version: $LATEST
2020-10-18T05:43:22.133Z 3e0f4c9f-bd58-191a-a748-280fd117ca87 INFO event: hogehoge
2020-10-18T05:43:22.144Z 3e0f4c9f-bd58-191a-a748-280fd117ca87 INFO context: {
callbackWaitsForEmptyEventLoop: [Getter/Setter],
succeed: [Function],
fail: [Function],
done: [Function],
functionVersion: '$LATEST',
functionName: 'test',
memoryLimitInMB: '1536',
logGroupName: '/aws/lambda/test',
logStreamName: '2020/10/18/[$LATEST]3bb3b43ee593083427b7c9b4fd72f976',
clientContext: undefined,
identity: undefined,
invokedFunctionArn: 'arn:aws:lambda:us-east-1:181260691:function:test',
awsRequestId: '3e0f4c9f-bd58-191a-a748-280fd117ca87',
getRemainingTimeInMillis: [Function: getRemainingTimeInMillis]
}
END RequestId: 3e0f4c9f-bd58-191a-a748-280fd117ca87
REPORT RequestId: 3e0f4c9f-bd58-191a-a748-280fd117ca87 Init Duration: 201.24 ms Duration: 22.61 ms Billed Duration: 100 ms Memory Size: 1536 MB Max Memory Used: 41 MB
"2020/10/18/[$LATEST]3bb3b43ee593083427b7c9b4fd72f976"