AWS Lambda でサポートされていない言語を使ってみた #アドカレ2015

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

毎度お馴染み流浪の動かしてみた & 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 をアップロードします。

Configure function

実装

ハンドラの実装は以下のようになります。今回はあらかじめ 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 関連の記事です。どうぞお楽しみに!