AWS Lambda でサポートされていない言語を使ってみた #アドカレ2015
毎度お馴染み流浪の動かしてみた & C 芸人の Fujimura です。
モバイルバックエンドとしても有用な AWS Lambda ですが、以前に紹介した AWS Lambda で BeanShell を動かしてみた のようにインタプリタを動かすことでサポートされていない言語でも Java による実装があれば動かすことができるため、今回は Scheme インタプリタである jakld を動かしてみました。
準備
$ git clone https://github.com/fd00/aws-lambda-jakld.git $ cd aws-lambda-jakld $ ./gradlew jar
生成された build/libs/aws-lambda-jakld-0.1.jar
をアップロードします。
実装
ハンドラの実装は以下のようになります。今回はあらかじめ fib を定義しておきました。jakld のドキュメントによると Eval.loadProgram(String fileName)
で外部の scheme ファイルを読み込んでおくことも可能なようです。
import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class AwsLambdaJakld implements RequestHandler<String, String> { @Override public String handleRequest(String input, Context context) { Eval.initializeSystem(); Eval.runProgram("(define (fib n) (if (< n 2) n (+ (fib (- n 2)) (fib (- n 1)))))"); return Eval.runProgram(input).toString(); } } ``` ## 実行 payload として S 式を渡します。 ``` $ aws lambda invoke --function-name AwsLambdaJakld --payload "\"(fib 10)\"" /dev/stderr > /dev/null "55" $ aws lambda invoke --function-name AwsLambdaJakld --payload "\"(fib 20)\"" /dev/stderr > /dev/null "6765" $ aws lambda invoke --function-name AwsLambdaJakld --payload "\"(fib 30)\"" /dev/stderr > /dev/null "832040"
まとめ
AWS Lambda でサポートされていない言語のインタプリタを動かすことで、AWS Lambda でサポートされていない言語を AWS Lambda で処理できるようにしてみました。既存の非サポート言語で書かれたコードを AWS Lambda で動かしたいということはレアケースだとは思いますが、意外に使いやすい言語との組み合わせも見つかるかもしれません。
明日 (12/14) は 能登 諭 による Amazon ML 関連の記事です。どうぞお楽しみに!