Introduction
先日,AWSはexperimentalなものとしてAWS Lambdaに特化した
JavaScriptランタイムのLLRT(Low Latency Runtime)を公開しました。
これはRustで実装されており、JavaScriptエンジンにはQuickJSを使っています。
LLRTを使うことでコールドスタート時間や
実行速度が高速になったりします。
そのあたりについては他にもいろいろ解説されてるし、
そのうち弊社のプロたちが詳細な記事を書くと思うので省略。
実際にLLRTをゼロから動かそうとすると、
(いまのところ)けっこう面倒です。
そうおもってたらSAMでサンプル動かすPRがでてたので、
それをやってみました。
Environments
- MacBook Pro (13-inch, M1, 2020)
- OS : MacOS 14.3.1
- SAM CLI : 1.109.0
Try
LambdaでLLRTを利用するには、Lambdaのランタイムとして
OS-only runtime (al2/al2023)を指定して、
LLRTのバイナリ(bootstrap)をバンドルすればよいとのことです。
Githubにはesbuildしてhogehogeする手順が記述してあるのですが、
とりあえず動かしたい人は、
SAMを使うサンプル(現時点ではPR段階)があるのでそれを
使いましょう。(他力本願)
Githubからclone(PRはマージされてました)してサンプルを動かしましょう。
Githubからcloneしてbuild&deploy
このPRにあるfork先のブランチを持ってきます。
llrtのリポジトリをcloneします。
% git clone https://github.com/awslabs/llrt.git
% cd llrt/example/llrt-sam/
template.yamlは下記のようになってます。
Runtimeにprovided.al2023を指定して、
BuildMethodにmakefileを指定しています。
・・・
Resources:
LlrtLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: .
CompatibleRuntimes:
- provided.al2023
Metadata:
BuildMethod: makefile
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: provided.al2023
Architectures:
- x86_64
Layers:
- !Ref LlrtLayer
Metadata: # Manage esbuild properties
BuildMethod: esbuild
BuildProperties:
External:
- '@aws-sdk'
- '@smithy'
- uuid
Minify: false
Target: "es2020"
Sourcemap: false
Format: esm
OutExtension:
- .js=.mjs
EntryPoints:
- app.ts
・・・
Makefileは下記。
Githubのreleasesページからllrt.zipをダウンロードしてきて
bootstapをつくってます。
build-LlrtLayer:
curl -s https://api.github.com/repos/awslabs/llrt/releases/latest | grep "llrt-lambda-x64.zip" | cut -d : -f 2,3 | tail -1 | xargs curl -o llrt.zip -L
unzip llrt.zip
mv bootstrap $( )
後はbuild&deployすればよいです。
実際に試したら問題なくデプロイされ、動作確認できました。
% sam --version
SAM CLI, version 1.109.0
% cd /path/your/llrt/example/llrt-sam/
% sam build
% sam deploy --guided
使い終わったらきれいにしておきしょう。
% sam delete --region <デプロイしたリージョン>