Slide 1

Slide 1 text

color is クラウドLT大会vol.9 新常識!JavaScript × AWS Lambdaがアツい!! 2024-06-27

Slide 2

Slide 2 text

自己紹介 ● 渡邉 洋平(watany) ○ NTTテクノクロス株式会社 ○ JAWS-UG東京 運営 ○ AWS Ambassadors (associate) ● 合同で勉強会できる企業を探しています ○ Jr. Champion/TopEngineer育成とか ○ 普通にTechの勉強会とか

Slide 3

Slide 3 text

今日の目標 ● AWS Lambda のJavaScript(TypeScript, Node.js)のトレンドを紹介する ○ 従来、拘りなくLambdaを書く場合にはPythonがファーストチョイスだった(個人 研究) ○ バックエンド、インフラでもJavaScript採用で効率化できそうなアップデート群を 紹介 ● お詫び ○ JavaScriptと言いつつ、TypeScript前提で話す

Slide 4

Slide 4 text

JavaScript × AWS Lambdaの新常識

Slide 5

Slide 5 text

JavaScript × AWS Lambdaの新常識 1. TypeScript × AWS CDK 2. LLRT 3. Lambda Web Adaptor 4. Response Streaming

Slide 6

Slide 6 text

1. TypeScript × AWS CDK ● AWS CDKとは? ○ Framework for CloudFormation ○ 概要は右のグラレコが必要十分 ● TypeScriptとは? ○ JavaScriptのSuperset ○ 強力かつ柔軟な型システム をJavascriptに付与 引用:使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説 https://aws.amazon.com/jp/builders-flash/202309/awsgeek-aws-cdk/

Slide 7

Slide 7 text

1. TypeScript × AWS CDK AWS CDKは多言語対応とあるが…? ● Toolネイティブ対応は”TypeScript” ○ Python、GoなどはJsiiが変換して対応(まれにバグを踏む) ● 2022年度の利用率は”72%”がJS/TS ○ 2024年現在の肌感覚でも同様 ○ JAWS-UG CDK支部も https://matthewbonig.com/posts/community-survey-2022/

Slide 8

Slide 8 text

1. TypeScript × AWS CDK 「NodejsFunction」でBundle部分をCDKに任せて、TypeScript ファーストのLambda開 発体験

Slide 9

Slide 9 text

JavaScript × AWS Lambdaの新常識 1. TypeScript × AWS CDK 2. LLRT 3. Lambda Web Adaptor 4. Response Streaming

Slide 10

Slide 10 text

2. LLRT LLRT (Low Latency Runtime) ● Node.js互換、WinterJS互換を目指し、AWSが開発するJS Runtime ○ QuickJS + Rust ○ 注)2024/6時点でBeta版

Slide 11

Slide 11 text

Cold Start:Node.js(1500ms) https://github.com/awslabs/llrt/tree/main/benchmarks

Slide 12

Slide 12 text

Cold Start:LLRT ( > 100ms) https://github.com/awslabs/llrt/tree/main/benchmarks

Slide 13

Slide 13 text

2. LLRT > LLRT offers up to over 10x faster startup and up to 2x overall lower cost compared to other JavaScript runtimes running on AWS Lambda ● つまりJS/TSのコードのままで ○ ColdStart性能の改善 ■ Go on AWS Lambdaと同等 ○ メモリ使用量の改善 ■ ≒ Costの改善

Slide 14

Slide 14 text

JavaScript × AWS Lambdaの新常識 1. TypeScript × AWS CDK 2. LLRT 3. Lambda Web Adaptor 4. Response Streaming

Slide 15

Slide 15 text

3. Lambda Web Adaptor LambdaのEvents ⇔ HTTP Request/Response ● Express.jsやNext.jsのWebフレームワークがAWS Lambdaでそのまま動 く! https://aws.amazon.com/jp/blogs/compute/using-response-streaming-with-aws-lambda-web-adapter-to-optimize-performance/

Slide 16

Slide 16 text

3. Lambda Web Adaptor 安全かつ高速なLambda Extensions ● Rust製で性能影響も軽微 ○ 平均レイテンシーは +0.8 ms 程度 ○ p99 でも +4 ms 程度 ● Docker on Lambdaなら1行足すだけ ○ Managed Runtimeだと少し面倒

Slide 17

Slide 17 text

Extensionsのアーキテクチャ https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/ 3. Lambda Web Adaptor

Slide 18

Slide 18 text

JavaScript × AWS Lambdaの新常識 1. TypeScript × AWS CDK 2. LLRT 3. Lambda Web Adaptor 4. Response Streaming

Slide 19

Slide 19 text

4. Response Streaming ● 2024年時点で、世はLLM時代 ○ つまり「ヌルヌル返却するやつ」時代ということ(?) ● Lambda Response Streaming ○ FunctionsURLから、ペイロードをStreamingで返せる ○ 最大20MB返せる(通常6MB)

Slide 20

Slide 20 text

4. Response Streaming 制約:動作条件 1.マネージドランタイム ○ Node.js v16以降”のみ” 2.カスタムランタイムに実装 ○ 実装済はRust Runtime for AWS Lambdaのみ? 3.+ Lambda Extensions ○ 後述のLambda Web Adaptorを使うと間接的に2.相当

Slide 21

Slide 21 text

4. Response Streaming Node.js Runtimeには、組み込みの独自関数が用意 https://aws.amazon.com/jp/blogs/news/introducing-aws-lambda-response-streaming/

Slide 22

Slide 22 text

4. Response Streaming Appendix. 組み込み関数は少し癖がある ● 実装前に、↓のスライドを読むのがおススメ https://speakerdeck.com/watany/aws-lambda-response-streaming-shi-zhuang-qian-nisiritaiyatu

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

まとめ ● JS/TS × LambdaとCDKとで、技術スタックを統一しやすい ● StreamingもNode.jsランタイムなら始めやすい ● Lambda Web AdaptorでJSの強力なWeb Flameworkを採用できる ● LLRTが実用化されれば更なる最適化へ…! だから JavaScript × AWS Lambdaがアツい!!