AWS Lambda で対話的にコマンドを実行できる lambdash を触ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

毎度お馴染み流浪の動かしてみた & C 芸人の Fujimura です。

AWS lambda の実行環境について、いろいろと調べたい時にその都度、情報出力用のコードをビルド → アップロードするのは非効率だと思っていたところ、lambda で動作する擬似的な shell にさまざまなコマンドを渡すことで効率よく調査したりすることができる lambdash というスクリプトを見つけたため、紹介したいと思います。

インストール

$ git clone https://github.com/alestic/lambdash
$ ./lambdash-install
$ export LAMBDASH_FUNCTION=lambdash-function-XXXXXXXXXXXX

lambdash-install では aws コマンドから渡された文字列をコマンドとして実行するハンドラを CFn 経由で展開します。

CloudFormation_Management_Console

実行

実行には boto3 などのいくつかの python package が必要となります。

$ pip install boto3
$ ./lambdash pwd
/var/task

折角なのでいろんな環境情報を取得してみます。

$ ./lambdash env | sort
AWS_ACCESS_KEY_ID=...
AWS_DEFAULT_REGION=us-east-1
AWS_LAMBDA_FUNCTION_MEMORY_SIZE=1536
AWS_LAMBDA_FUNCTION_NAME=lambdash-function-XXXXXXXXXXXX
AWS_LAMBDA_FUNCTION_VERSION=$LATEST
AWS_LAMBDA_LOG_GROUP_NAME=/aws/lambda/lambdash-function-XXXXXXXXXXXX
AWS_LAMBDA_LOG_STREAM_NAME=2015/10/17/[$LATEST]XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AWS_REGION=us-east-1
AWS_SECRET_ACCESS_KEY=...
AWS_SESSION_TOKEN=...
LAMBDA_RUNTIME_DIR=/var/runtime
LAMBDA_TASK_ROOT=/var/task
NODE_PATH=/var/runtime:/var/task:/var/runtime/node_modules
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/var/task
SHLVL=1
_=/usr/bin/env
$ ./lambdash uname -a
Linux ip-XXX-XXX-XXX-XXX 3.14.48-33.39.amzn1.x86_64 #1 SMP Tue Jul 14 23:43:07 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ ./lambdash ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
496 1 0.0 0.4 731128 18900 ? Ssl 03:33 0:00 node --max-old-space-size=1229 --max-new-space-size=153 --max-executable-size=153 /var/runtime/node_modules/.bin/awslambda
496 13 0.0 0.0 13556 1076 ? R 03:37 0:00 ps aux
$ ./lambdash java -version
openjdk version "1.8.0_51"
OpenJDK Runtime Environment (build 1.8.0_51-b16)
OpenJDK 64-Bit Server VM (build 25.51-b03, mixed mode)

基本的にコマンドが打てるため、だいたいの情報は取得できるのではないかと思います。

おわりに

lambdash は JavaScript で書かれていますが、Java 版や python 版もあると、言語特有の情報も取得できて、さらに面白いのではないかと思いました。