作成日: 2025-8-20
更新日: 2025-9-9
Lambda Web Adapterとは、Lambdaが提供する拡張機能の1つです。
Lambda Web Adapterのできることや使い方について解説します。
Lambda Web Adapterを使うとLambda上でNext.jsやExpress.jsなどのフレームワークを使ったWebアプリケーションを動かすことが可能です。
一部抜粋ですが、そのほかにも以下のフレームワークを使ったWebアプリケーションの実行が可能です。
Lambda関数は文字どおり関数の実行がメインであり、フレームワークを使ったWebアプリケーションをそのまま使うことはできません。
Lambda Web Adapterを使うとLambda上でWebアプリケーションの実行が可能になります。
Lambda Web Adapterでは、API Gateway Endpoint、Lambda Function URL、Application Load Balancerをサポートしています。
これらと組み合わせることでLambdaをAPIサーバー、アプリケーションサーバーとして運用することが可能です。
普段使っているDockerfileに以下の一文を追加するだけでLambda Web Adapterを使ったデプロイが可能です。
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 /lambda-adapter /opt/extensions/lambda-adapter
あとはbuildしたDocker ImageをECRにpushし、Lambda関数でそのImageを指定してあげるだけです。
Zip Packageを使う場合、3つのステップを使う必要があります。
① Lambda Web Adapterのレイヤーを作成する
以下はServerless Application Modelを使う例です。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
serverless-nextjs-demo
Sample SAM Template for serverless-nextjs-demo
Globals:
Function:
Timeout: 10
Resources:
NextjsFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: app/
MemorySize: 256
Handler: run.sh
Runtime: nodejs20.x
Architectures:
- x86_64
Environment:
Variables:
AWS_LAMBDA_EXEC_WRAPPER: /opt/bootstrap
AWS_LWA_ENABLE_COMPRESSION: true
RUST_LOG: info
PORT: 8000
Layers:
- !Sub arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:25
② 環境変数AWS_LAMBDA_EXEC_WRAPPER = /opt/bootstrap
を設定する
③アプリケーションを実行するためのシェルスクリプトを作成する。例:run.sh
.
#!/bin/bash
[ ! -d '/tmp/cache' ] && mkdir -p /tmp/cache
HOSTNAME=0.0.0.0 exec node server.js
Lambda上でWebアプリケーションを実行できるので、ECS等のコンテナサービスを使うよりコストを抑えることができます。
Lambda Web AdapterはLambdaの拡張機能になりますが、課金対象ではないようです。
Dockerfileを使うことができるので、当然ローカルでも実行が可能です。
ただし、Zip Packageで使う場合はDockerfileほど簡単ではないです。
Webアプリケーションランタイムの起動、アダプターの初期化、アプリケーションの初期化が行われるためコールドスタートによる遅延が発生します。
ただし、コールドスタートは通常のLambda関数でも発生します。
Lambda Web Adapterを使ったアプリケーションの実行では通常のLambda関数よりわずかに処理が長くなってしまうだけのようです。
https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/