Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lambda Web Adapterについて自分なりに理解してみた

Lambda Web Adapterについて自分なりに理解してみた

2025/06/28 開催の「Serverless Meetup Osaka #05」における私のLT「Lambda Web Adapterについて自分なりに理解してみた」の発表資料です。 #serverlessosaka

https://serverless.connpass.com/event/358810/

Avatar for Makky12

Makky12

June 30, 2025
Tweet

More Decks by Makky12

Other Decks in Technology

Transcript

  1. 1 KDDI Agile Development Center Corporation 自己紹介 ◼ 氏名:鈴木 正樹

    ◼ 所属:KDDIアジャイル開発センター(KAG) 名古屋オフィス ◼ 役割:クラウドアーキテクト & バックエンドエンジニア AWS(特にサーバーレスやInfrastructure as Code)が大好き。 好きなサービスはAWS LambdaとAWS CDK 主にJAWS-UG 名古屋 & JAWS-UG CDK支部で活動 ◼ Certification: ◼ AWS Solution Architect Associate(2023) ◼ AWS Community Builder(serverless)(2023~) ◼ : @makky12(SUZUKI Masaki@クラウドエンジニア) ◼ Blog:https://makky12.hatenablog.com/
  2. 2 KDDI Agile Development Center Corporation 本日のアジェンダ • Lambda Web

    Adapterについて • なぜ今まではWebアプリを動かせなかったか&なぜLambda Web AdapterではWebアプリ を動かせるのか • まとめ & 告知 ※ 「実際にLambda Web Adapterを動かしてみた」的なことは話しません。ご了承ください
  3. 3 KDDI Agile Development Center Corporation 注意事項 • 発表資料・発言内容は、すべて個人の見解・知見になります ◦

    所属企業・団体・コミュニティなどの公式見解とは一切関係ありません • この資料は下記URLで公開しています ◦ TODO
  4. 5 KDDI Agile Development Center Corporation 前提:Lambda Web Adapterについての認識 •

    「Lambda Web Adapter」という言葉を最近よく耳にするようになった ◦ 去年~今年にかけて特に(※1) • 最初は「LambdaでWebアプリ(※2)が動かせるようになった」程度の認識だった ◦ 「LambdaでExpressやNext.jsが動かせるようになったんだ」 ◦ 「フロントエンド環境構築&開発が便利になったんだなあ」くらいの印象 • が、さすがに認識不足だったので、もう少し調べてみた ※1:Lambda Web Adapterのリリース自体は2023年 ※2:この資料の「Webアプリ」は、HTTPを使用する任意のWebアプリケーション、およびHTTP APIなどを指します
  5. 6 KDDI Agile Development Center Corporation Lambda Web Adapterとは Lambda

    Web Adapterの概要 ※個人の認識です • コンテナで作成されたWebアプリを、Lambdaで実行可能にするツール ◦ Webフレームワーク(Express, Next.jsなど)で作成したWebサーバーアプリ、HTTP APIなど • Lambda Web Adapterを使ったWebアプリはAmazon EC2、AWS Fargate、ローカルPCで も動作可能 • 言い換えると「HTTPのリクエスト形式をLambdaでも扱えるようにするためのツール」 ◦ これについては後半で話します
  6. 7 KDDI Agile Development Center Corporation Lambda Web Adapter活用アーキテクチャ •

    AWS公式による、現在のLambda Web Adapterを活用するアーキテクチャは以下の通り 参照:Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化する(2025版改訂版) ※AWS 友岡さんのbuilders.flash記事 Client Amazon CloudFront AWS Lambda (Lambda Web Adapter使用) AWS Lambda@Edge Request Signer (オリジンリクエスト) Webアプリ (Webフレームワーク) リクエスト 関数URL
  7. 8 KDDI Agile Development Center Corporation Lambda Web Adapter&先ほどのアーキテクチャのメリット •

    呼び出しに関数URLが使用可能(CloudFrontのオリジンにLambdaを指定) ◦ 「Lambdaの実行時間が最長15分になる」「レスポンスストリーミングを使用可能」などのメリットがある • 特にAI関連の機能を扱う際に特に重要な要素 ◦ CloudFront Origin Access Control(OAC)で、関数URLエンドポイントをセキュアに保護可能 • 既存Webアプリのサーバーレス化 ◦ 既存のWebアプリを、ほとんどコード変更することなくLambdaで実行可能 ◦ 既存の資産を活用しつつ、サーバーレス化により管理工数削減など、サーバーレスのメリットを享受できる • 異なる環境への移植性 ◦ Lambda Web Adapterを使ったWebアプリはAmazon EC2、AWS Fargate、ローカルPCでも動作可能 ◦ 各環境の差異がなくなり「ローカルからLambdaへ一気にマイグレーションする」という事も可能になる
  8. 9 KDDI Agile Development Center Corporation Lambda Web Adapterの導入方法 •

    既存WebアプリのDockerfileに、1行追加するだけ。(以下ソース参照) # Dockerfile FROM public.ecr.aws/docker/library/node:20-slim # この1行を追加すればOK(バージョンは要確認) COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.9.1 /lambda-adapter /opt/extensions/lambda-adapter # あとは、通常のDockerfile通り(下記ソースはLambda Web AdapterのGitHub公式リポジトリより記載) ENV PORT=7000 WORKDIR "/var/task" ADD src/package.json /var/task/package.json ADD src/package-lock.json /var/task/package-lock.json RUN npm install --omit=dev ADD src/ /var/task CMD ["node", "index.js"]
  9. 11 KDDI Agile Development Center Corporation 【再掲】Lambda Web Adapterとは Lambda

    Web Adapterの概要 ※個人の認識です • コンテナで作成されたWebアプリを、Lambdaで実行可能にするツール ◦ Webフレームワーク(Express, Next.jsなど)で作成したWebサーバーアプリ、HTTP APIなど • Lambda Web Adapterを使ったWebアプリはAmazon EC2、AWS Fargate、ローカルPCで も動作可能 • 言い換えると「HTTPのリクエスト形式をLambdaでも扱えるようにするためのツール」 ◦ これについては後半で話します ↑ ここがポイント!
  10. 12 KDDI Agile Development Center Corporation Q:なぜ今まではWebアプリを動かせなかったか A:型が違うから • HTTPリクエスト形式と、Lambdaがリクエストを扱う形式(Event形式)に互換性がない

    • そのため、Event形式をWebアプリで扱う(受け取る)ことができない • API Gatewayや関数URL経由でLambdaを実行できるのは、API Gatewayや関数URLが HTTPリクエスト形式→Event形式の変換を行うため // HTTPリクエスト形式 POST /api/employee HTTP/1.1 HOST: example.com Content-Type: application/json { “name”: “Masaki Suzuki” “email”: “m[email protected]” } // Event形式(例:API Gatewayのイベント形式を一部抜粋) { “resource”: “/api/employee” “path: “/api/employee” “httpMethod”: “POST”, “headers”: { “Content-Type”: “application/json”, }, “body”: “{¥”name¥”:¥"Masaki Suzuki¥", ¥"email¥":¥“[email protected]¥"}” }
  11. 13 KDDI Agile Development Center Corporation Q:なぜLambda Web AdapterではWebアプリを動かせるのか A:Lambda

    Web AdapterがEvent形式→HTTPリクエスト形式への再変換を行うから • Lambda Web AdapterがEvent形式からHTTPリクエスト形式への再変換してくれる • そのため、 WebアプリをLambdaで動かすことができる • イメージとしては以下 参照:Lambdalithアーキテクチャにより大きく進化するWeb APIの世界 ※Serverless Operations 堀家さんの資料 Lambda関数URL・ API Gateway Event Lambda Web Adapter HTTP Request Format Web Framework Client リクエスト送信 (HTTP形式) 変換(→ Event形式) 再変換(→ HTTP形式) 呼び出し
  12. 15 KDDI Agile Development Center Corporation まとめ • Lambda Web

    Adapterを使うと、WebアプリをLambdaで動かすことができる ◦ Event形式をHTTPリクエスト形式に再変換してくれるため • WebアプリをLambdaで動かすことで、さまざまな恩恵を受けることができる ◦ 管理工数削減・オートスケーリングなど、サーバーレスのメリット ◦ 関数URLによる実行制限の延長(15分)、レスポンスストリーミングの使用(=AIとの親和性) ◦ ローカルPC/Amazon EC2/AWS Fargateとの移植容易性…etc. • とはいえ「銀の弾丸」なんて事はないので、デメリットも考慮する必要がある ◦ (例)コールドスタート問題、すべてのWebフレームワークに対応しているとは限らない…etc.
  13. 札幌オフィス SAPPORO OFFICE 秋田オフィス AKITA OFFICE 高崎オフィス TAKASAKI OFFICE 金沢オフィス

    KANAZAWA OFFICE 舞鶴オフィス MAIZURU OFFICE 広島オフィス HIROSHIMA OFFICE 福岡オフィス FUKUOKA OFFICE 那覇オフィス NAHA OFFICE 仙台オフィス SENDAI OFFICE 東京本社 TOKYO MAIN OFFICE 三島オフィス MISHIMA OFFICE 名古屋オフィス NAGOYA OFFICE 大阪オフィス OSAKA OFFICE