自作言語をAWS LambdaのCustom Runtimeで動かしてみました。

今回は自作言語のLANDをLambdaで動かしてみました。

LANDはシングルバイナリで動き、以下のインターフェースで処理を実行します。

概要

  • bootstrapと自作言語の環境(バイナリや設定ファイル)を作成
  • 実行環境のzipファイルからLayerを作成
  • Layerを使うLambda Functionを作成

bootstrapと自作言語の環境を作成

まずはbootstrapを作成します。名前の通りここがLambdaランタイムの起点となるようです。

チュートリアルのbootstrapのほぼ丸パクリですが、21行目の $LAND_BIN run ...のところが、自作言語を実行している部分になります。引数は$LAMBDA_TASK_ROOT$_HANDLERから生成しています。$_HANDLERは作成した関数のhandlerが入ります。

今回はbootstrapをbashで書いてますが、ランタイム内で使える別の言語(自作言語とか)で書いてもOKです。

 

続いて、自作言語のビルドをしていきます。

Dockerを使ってamazonlinuxのコンテナ内で自作言語をビルドしてローカルにビルドしたバイナリを置きます。Dockerfileの場合はFROMのイメージをこんな感じで書けばOK

ただ、Lambdaの実行環境で動けば良いので、必ずしもDockerfileでビルドする必要はないです。
実行環境はこちらに書いてあります↓

Lambda 実行環境と利用できるライブラリ – AWS Lambda

golangでビルドする場合はLinux + amd64でビルドしたものがそのまま動きました。

実行環境のzipファイルからLayerを作成

bootstrapと自作言語のバイナリなどをzip化してLayerを作成します

Layerはaws-cliだとこんな感じで作れます。レスポンスが返ってくるのでLayerArnをメモります。

Layerを使うLambda Functionを作成

あとはLayerを使ってLambda Functionを作るだけ。

参考