AWS Lambda で BeanShell を動かしてみた

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

以前、紹介した lambdash の Java 版を BeanShell で実現してみました。

準備

$ git clone https://github.com/fd00/aws-lambda-bsh.git
$ cd aws-lambda-bsh
$ ./gradlew jar

生成された build/libs/aws-lambda-bsh-0.1.jar をアップロードします。

AWS_Lambda

実行

payload として result に結果が格納されるようなコードを渡します。

$ aws lambda invoke --function-name AwsLambdaBsh --payload "\"result = java.lang.Math.PI;\"" /dev/stderr > /dev/null
"3.141592653589793"

システムプロパティを取得してみます。

$ aws lambda invoke --function-name AwsLambdaBsh --payload "\"result = System.getProperties();\"" /tmp/properties.txt > /dev/null
$ cat /tmp/properties.txt | sed -e 's/^"{//' -e 's/}"$//' | sed -e 's/, /%/g' | tr '%' '\n'
awt.toolkit=sun.awt.X11.XToolkit
file.encoding.pkg=sun.io
file.encoding=ANSI_X3.4-1968
file.separator=/
java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment
java.awt.printerjob=sun.print.PSPrinterJob
java.class.path=/var/runtime:/var/runtime/lib/LambdaSandboxJavaAPI-1.1.jar
java.class.version=52.0
java.endorsed.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/endorsed
java.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/ext:/usr/java/packages/lib/ext
java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre
java.io.tmpdir=/tmp
java.library.path=/var/runtime:/var/task:/var/task/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.runtime.name=OpenJDK Runtime Environment
java.runtime.version=1.8.0_51-b16
java.specification.name=Java Platform API Specification
java.specification.vendor=Oracle Corporation
java.specification.version=1.8
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
java.vendor.url=http://java.oracle.com/
java.vendor=Oracle Corporation
java.version=1.8.0_51
java.vm.info=mixed mode
java.vm.name=OpenJDK 64-Bit Server VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Oracle Corporation
java.vm.specification.version=1.8
java.vm.vendor=Oracle Corporation
java.vm.version=25.51-b03
line.separator=\n
os.arch=amd64
os.name=Linux
os.version=3.14.48-33.39.amzn1.x86_64
path.separator=:
sun.arch.data.model=64
sun.boot.class.path=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/rt.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/jfr.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/classes
sun.boot.library.path=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/amd64
sun.cpu.endian=little
sun.cpu.isalist=
sun.io.unicode.encoding=UnicodeLittle
sun.java.command=lambdainternal.LambdaRTEntry
sun.java.launcher=SUN_STANDARD
sun.jnu.encoding=ANSI_X3.4-1968
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
sun.os.patch.level=unknown
user.country=US
user.dir=/
user.home=/home/sbx_user1051
user.language=en
user.name=sbx_user1051
user.timezone=UTC

まとめ

Java 特有の実行環境情報を取得するという目的で BeanShell を組み込んだ AWS Lambda function を作成してみました。

当然ながらインタプリタとしても動くため、簡易コードの AWS Lambda での挙動確認にも利用できると思います。