AWS Lambdaをローカル上でDcokerを使って実行する

AWS

公開: 2020-10-21

更新: 2020-10-22

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"