AWS Lambdaを使えばちょっとしたコードを実行して即座に終わるといった処理が簡単に作れるようになります。Webサービスのように恒常的に使うものではないけれども(API Gatewayを合わせればできますが)、コールしたらすぐに実行できるという手軽さがウリです。 そんなLambdaの開発時に使えるソフトウェアがdocker-lambdaです。Lambda風に実行できるDockerコンテナです。

docker-lambdaの使い方

例えばこんな感じのコードを書きます。

// Just a test lambda, run with:
// docker run -v "$PWD":/var/task lambci/lambda

exports.handler = function(event, context, cb) {

  console.log(process.execPath)
  console.log(process.execArgv)
  console.log(process.argv)
  console.log(process.cwd())
  console.log(process.mainModule.filename)
  console.log(__filename)
  console.log(process.env)
  console.log(process.getuid())
  console.log(process.getgid())
  console.log(process.geteuid())
  console.log(process.getegid())
  console.log(process.getgroups())
  console.log(process.umask())

  console.log(event)

  console.log(context)

  context.callbackWaitsForEmptyEventLoop = false

  console.log(context.getRemainingTimeInMillis())

  cb()
}

後はDockerイメージを指定して実行するだけです。

$ docker run -v "$PWD":/var/task lambci/lambda
START RequestId: 7f711d24-315f-10fe-5003-f79adefbc383 Version: $LATEST
2016-07-25T01:57:38.414Z	7f711d24-315f-10fe-5003-f79adefbc383	/usr/local/lib64/node-v4.3.x/bin/node
2016-07-25T01:57:38.415Z	7f711d24-315f-10fe-5003-f79adefbc383	[ '--max-old-space-size=1229',
  '--max-semi-space-size=76',
  '--max-executable-size=153' ]
  :
REPORT RequestId: 7f711d24-315f-10fe-5003-f79adefbc383	Duration: 20.38 ms	Billed Duration: 100 ms	Memory Size: 1536 MB	Max Memory Used: 25 MB	

nodeの他、PythonやJavaを使うこともできます。

$ docker run lambci/lambda:build java -version
openjdk version "1.8.0_77"
OpenJDK Runtime Environment (build 1.8.0_77-b03)
OpenJDK 64-Bit Server VM (build 25.77-b03, mixed mode)

AWS Lambdaを使わない場合でもdocker-lambdaを設置すればプライベートなLambdaが手に入ります。カスタマイズもしやすいので、docker-lambdaをベースにしてみるのも面白そうです。

docker-lambdaはMIT Licenseのオープンソース・ソフトウェアです。

lambci/docker-lambda: Docker images and test runners that replicate the live AWS Lambda environment