docker-lambda - Dockerを使ったAWS Lambdaクローン
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