Rust製の高速 AWS Lambda ランタイム「LLRT」をSAMで動かす

2024.02.15

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 <デプロイしたリージョン>

References