AWS Lambda で対話的にコマンドを実行できる lambdash を触ってみた
毎度お馴染み流浪の動かしてみた & 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 経由で展開します。
実行
実行には 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 版もあると、言語特有の情報も取得できて、さらに面白いのではないかと思いました。