Slide 1

Slide 1 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Monolithic Lambda Monolith First - Serverless Development Kensuke Shimokawa Snr. Serverless Specialist Amazon Web Services Japan

Slide 2

Slide 2 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. About me… Kensuke Shimokawa Amazon Web Services Japan Snr. Serverless Specialist https://speakerdeck.com/_kensh https://qiita.com/_kensh

Slide 3

Slide 3 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Agenda • AWS Lambda について • AWS Lambda はイベントドリブン • AWS Lambda はコンテナサービスなのか︖ • AWS Lambda の 実⾏モデル • AWS Lambda におけるマイクロサービス • AWS Lambda とデザイン • AWS Lambda を Monolithic に運⽤する

Slide 4

Slide 4 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda について

Slide 5

Slide 5 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 歴史の始まりはイベントドリブンだった • Amazon S3 → AWS Lambda から始まった / Nov. 13, 2014 • 実は Amazon API Gateway → AWS Lambda は後発 / Jul. 9, 2015 • そして Amazon SQS → AWS Lambda へと進化 / Jun. 28, 2018

Slide 6

Slide 6 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 🎂 🎂

Slide 7

Slide 7 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda はイベントドリブン

Slide 8

Slide 8 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Invoke のよくある誤解 Invoke API Client Service API payload Lambda Service def lambda_handler(event, context): # do something return { … } handler event object event 注) この図は間違い

Slide 9

Slide 9 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Invoke Invoke API Client Service API payload Lambda Service 実⾏環境 Runtime API Lambda Function Instance API payload def lambda_handler(event, context): # do something return { … } handler event object event

Slide 10

Slide 10 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. なぜイベントドリブンとの相性がよいのか • ひとつのことをうまくやるのが得意 • あれ、これマイクロサービスっぽい︖ • “⼀つのこと” の意味を拡張 • WEB のバックエンドをうまくやる • 既存のフレームワークとの相性問題 • ColdStart の問題 • Performance の課題

Slide 11

Slide 11 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Decision tree Can be event driven? Can be event driven? Can be event driven? Object Storage Queue Stream File system アーキテクチャをイベントドリブンにできるか︖ YES YES YES NO NO NO

Slide 12

Slide 12 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Use CDN, Server push, cache, rate limit, etc. Microservices Microservices Microservices DB DB DB Queue REST REST Stream Browser Mobile REST REST Amazon API Gateway Cache css, js, html, image Static Contents CDN Cache WAF WAF Object Storage WebSocket Server push

Slide 13

Slide 13 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Decision tree アーキテクチャを⾮同期にできるか︖ Can be asynchronous? Can be asynchronous? Can be asynchronous? asynchronous asynchronous asynchronous synchronous YES YES YES NO NO NO

Slide 14

Slide 14 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda は コンテナサービスなのか︖

Slide 15

Slide 15 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. どこまでコンテナっぽく使えるのか • Artifact はコンテナ形式でパッケージングされている • docker run しているわけではない • レジストリは Amazon Elastic Container Registry (ECR) だけ • サイドカー は使えるが制限も多い / Lambda Extension Main Side Log Saving App 実⾏環境 Log Store Service https://aws.amazon.com/jp/builders-flash/202202/new-lambda-container-development-7/

Slide 16

Slide 16 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda execution environment Firecracker MicroVM MicroVM Kernel Lambda Sandbox Execution Environment KVM on Bare Metal EC2 FunctionB Code FunctionB /tmp Extension Code FunctionB Runtime Extension Runtime FunctionB vCPU FunctionB Memory Firecracker MicroVM MicroVM Kernel Lambda Sandbox Execution Environment FunctionA Code FunctionA /tmp Extension Code FunctionA Runtime Extension Runtime FunctionA vCPU FunctionA Memory Shared resources within execution environment Unshared resources within execution environment https://docs.aws.amazon.com/lambda/latest/ operatorguide/execution-environment.html Managed by AWS Lambda Service FunctionA Network FunctionB Network

Slide 17

Slide 17 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda の 実⾏モデル

Slide 18

Slide 18 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda を使う上で考えたいこと • なぜ、ルーティングを持ちたくないのか • なぜ、マルチスレッドを持ちたくないのか • なぜ、プロセスを複数起動させたくないのか

Slide 19

Slide 19 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda を使う上で考えたいこと • なぜ、ルーティングを持ちたくないのか • なぜ、マルチスレッドを持ちたくないのか • なぜ、プロセスを複数起動させたくないのか

Slide 20

Slide 20 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. API Gateway Routing Endpoint /api/ GET POST /books/ /{id} GET PUT Lambda function Lambda function Lambda function Lambda function $ curl https://domain/api/books/12 API Gateway Routing

Slide 21

Slide 21 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Worker Routing Application Load Balancer Front End Front End Worker Manager Worker Manager Worker Worker Invoke Routing Reserve Sandbox Routing Amazon API Gateway AWS Lambda $ curl https://domain/api/books/12

Slide 22

Slide 22 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Handler dispatch event def handler(event, context): id = getId(event) book = get_item(id) return book handler $ curl https://domain/api/books/12

Slide 23

Slide 23 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda を使う上で考えたいこと • なぜ、ルーティングを持ちたくないのか • 多重ルーティングを緩和できるか︖ => モノリシックデザインへ • なぜ、マルチスレッドを持ちたくないのか • なぜ、プロセスを複数起動させたくないのか

Slide 24

Slide 24 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. API Gateway Routing / 再掲 Endpoint /api/ GET POST /books/ /{id} GET PUT Lambda function Lambda function Lambda function Lambda function $ curl https://domain/api/books/12 API Gateway Routing Routing + Web Framework

Slide 25

Slide 25 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. API Gateway でどのようにルーティングするのか • ANY + Proxy • 認証やWAFなどは統合されて coupling に • method resource 単位の細かい統合制御はやり難い • method 単位の throttle など API Gateway ならではの機能は使い難い

Slide 26

Slide 26 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. API Gateway Routing / Monolithic Endpoint /{proxy+} ANY Lambda function $ curl https://domain/api/books/12 API Gateway Routing Monolithic Routing

Slide 27

Slide 27 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Web Framework Routing / Monolithic dispatch event from mangum import Mangum app = FastAPI() handler = Mangum(app) handler @app.get(‘/api/books') def books(): return [book1, boo2, boo3, … bookN] @app.post(‘/api/books') def books(book): put_item(book) @app.put("/api/books/{id}") def books(book): put_item(book) @app.get("/api/books/{id}") def get_book(id): book = get_item(id) return book Routing $ curl https://domain/api/books/12

Slide 28

Slide 28 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda を使う上で考えたいこと • なぜ、ルーティングを持ちたくないのか • なぜ、マルチスレッドを持ちたくないのか • なぜ、プロセスを複数起動させたくないのか

Slide 29

Slide 29 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. ルーティングとスレッドそしてプロセス Handler 内での、 • ルーティングなし、スレッドなし • Pure Lambda • ルーティングあり、スレッドなし • AWS Chalice • ルーティングあり、スレッドあり • Spring Boot / Ruby on Rails / Laravel on Lambda

Slide 30

Slide 30 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. スケールのポイント Amazon DynamoDB マルチスレッドでスケールさせる ためには、スケールアップが必要 となる / マルチプロセスも同様 AWS Lambda Amazon API Gateway

Slide 31

Slide 31 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda を使う上で考えたいこと • なぜ、ルーティングを持ちたくないのか • なぜ、マルチスレッドを持ちたくないのか • なぜ、プロセスを複数起動させたくないのか

Slide 32

Slide 32 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Lifecycle のポイント / Env Freeze Runtime INIT Function INIT Function INVOKE Lambda Execution Environment Function INVOKE Function INVOKE Runtime SHUTDOWN INIT INVOKE INVOKE INVOKE SHUTDOWN Freeze Freeze Freeze time

Slide 33

Slide 33 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Lifecycle のポイント / Frozen Runtime INIT Function INIT Function INVOKE Lambda Execution Environment Function INVOKE Function INVOKE Runtime SHUTDOWN time frozen frozen sub process A sub process B ※ マルチスレッドや Node.js での Event Queue も同様

Slide 34

Slide 34 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. スケールのポイント / 再掲 Amazon DynamoDB Amazon API Gateway AWS Lambda マルチスレッドでスケールさせる ためには、スケールアップが必要 となる / マルチプロセスも同様 Lambda 関数実装としてのマルチプロセス、 マルチスレッドのコントロール サーバーレスサービスでのスケール コントロール KISS principle >

Slide 35

Slide 35 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda におけるマイクロサービス

Slide 36

Slide 36 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス の⼤きさ ⼊荷する ⽀払い Monolith 出荷する ポイント 獲得 在庫数の 取得

Slide 37

Slide 37 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス の⼤きさ ⼊荷する 在庫ドメイン 出荷する 在庫数の 取得 ポイント 獲得 ⽀払い Modular Monolith 決済ドメイン Interface

Slide 38

Slide 38 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス の⼤きさ ⼊荷する 在庫ドメイン 出荷する 在庫数の 取得 ポイント 獲得 ⽀払い 決済ドメイン Microservices API

Slide 39

Slide 39 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. なぜ⼈は マイクロサービスで作れと⾔ってきたか • 最⼩権限の原則 • Cold Start • Function model の原則 / Event Driven Lambda • Web Framework は Lambda 世界の住⺠じゃない︖ • Lambdaのスケーリングを意識して作られていない

Slide 40

Slide 40 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービスとして作った時の弊害 • 細かくたくさんのパイプライン • 関数爆発 / Lambda 関数が 1000 個 ということも • 誰が、どの関数を管理、運営しているかの統制 • Lambda Layer の使い⽅における課題 • package managerで管理したい︖ • IDE でクラス参照できない • リファクタの容易性を維持したい • モノリポの管理複雑性 • リポ push 通知 / webhook の path route が煩雑化

Slide 41

Slide 41 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービス Lambda の勘違い 1/2 • Lambda は分割しており、DB も分かれているがリリースサイクルを 同期しないといけない • 共通のLayerに⽀配され、共通が更新されると全部に配布しないといけない • IAM Role を使い回している • Lambda からLambda を呼んでいる • polyglot になっていない

Slide 42

Slide 42 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービス Lambda の勘違い 2/2 • マイクロサービス = 1 Lambda 関数だと思っている • 極度に Monolith を嫌う、極度に Microservices 思考 • API backed Lambda と Messaging service backed Lambda を同じ感 覚で作ろうとしている • messaging backed は microserviceであるかはともかく、does one thing/few things • 全部を Microservices にしようとしている • トランザクション境界を跨いでを分離してしまう • リポジトリ数が発散する

Slide 43

Slide 43 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda の⼤きさ ⼊荷する 在庫ドメイン 出荷する 在庫数の 取得 ポイント 獲得 ⽀払い 決済ドメイン Functional Unit Microservices の単位よりも さらに粒度が細かい

Slide 44

Slide 44 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda の⼤きさ ⼊荷する 在庫ドメイン 出荷する 在庫数の 取得 ポイント 獲得 ⽀払い 決済ドメイン AWS CloudFormation Stack Functional Unit

Slide 45

Slide 45 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda の⼤きさ ⼊荷する 在庫ドメイン 出荷する 在庫数の 取得 ポイント 獲得 ⽀払い 決済ドメイン High Cohesion / ⾼凝集 AWS CloudFormation Stack

Slide 46

Slide 46 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda の⼤きさ Monolith Modular Monolith Microservices Functional Unit High Cohesion FAT THIN Container の尺度 Lambda の尺度 Microservices (Nanoservices) Lambda Monlithic Lambda

Slide 47

Slide 47 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. アーキテクチャで⾒ると / ギフトサービス admin reminder gift order AWS Cloud Admin API fetch Notify Bus Notify Flow render select templates templates attachments rendered prepare send notifications SMS SaaS Mail SaaS Monolith Change stream ETL data integration Template Insight transform Change stream ETL data integration Send Insight transform Data SaaS transform ETL Search

Slide 48

Slide 48 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. ドメインで分けると admin reminder gift order AWS Cloud Admin API fetch Notify Bus Notify Flow render select templates templates attachments rendered prepare send notifications SMS SaaS Mail SaaS Monolith Change stream ETL data integration Template Insight transform Change stream ETL data integration Send Insight transform Data SaaS transform ETL Search Notification Domain Analytics Domain

Slide 49

Slide 49 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービス はコンテキスト境界で分割 admin reminder gift order AWS Cloud Admin API fetch Notify Bus Notify Flow render select templates templates attachments rendered prepare send notifications SMS SaaS Mail SaaS Monolith Change stream ETL data integration Template Insight transform Change stream ETL data integration Send Insight transform Data SaaS transform ETL Search マイクロサービス

Slide 50

Slide 50 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. スタックで分けると admin reminder gift order AWS Cloud Admin API fetch Notify Bus Notify Flow render select templates templates attachments rendered prepare send notifications SMS SaaS Mail SaaS Monolith Change stream ETL data integration Template Insight transform Change stream ETL data integration Send Insight transform Data SaaS transform ETL Search Admin Template Analytics Notification Store Notification Analytics

Slide 51

Slide 51 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 現状は、Functional Unit admin reminder gift order AWS Cloud Admin API fetch Notify Bus Notify Flow render select templates templates attachments rendered prepare send notifications Monolith

Slide 52

Slide 52 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Cohesion (凝集度)で結合すると admin reminder gift order AWS Cloud Admin API Admin function Notify Bus Notify Flow templates templates attachments rendered prepare send notifications Monolith

Slide 53

Slide 53 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Microservices (Domain)で結合すると admin reminder gift order AWS Cloud Admin API Notify function Notify Bus Notify Flow templates templates attachments rendered notifications Monolith Monlithic Lambda

Slide 54

Slide 54 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda とデザイン

Slide 55

Slide 55 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. モノリスとマイクロサービスは排他ではない • 結局はアーキテクチャパターン • パターンを利⽤するのであって、⽀配されるのではない • e.g. “我が社のプロダクトはすべてマイクロサービスにします︕” • 両⽅共存して使う / これは Lambda に限らず • テスタブルでリファクタブルなら、アーキテクチャは推移する • 進化し続けるのがよい

Slide 56

Slide 56 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービスの適切な⼤きさって︖ • モノリスとマイクロサービスの2択は極端 • その中間の適切な位置を探る • 探りはじめの⽅向性のマインドセットがモノリスファースト • デザインは KPI ではない、ビジネスが進化するに⼗分であれば良い • 逆にマイクロサービスであってもビジネスが進化しなかったり、その妨げに なっていることを観測できる KPI が必要 • そもそも進化が必要ない領域をなぜマイクロサービスにするのか︖ • 常に⾃問⾃答する

Slide 57

Slide 57 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. モジュラーモノリスという道 • 単にモノリス回帰するわけではなくモジュラーにはしておく

Slide 58

Slide 58 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. アーキテクチャの進化 Time 1 7 初期開発では モノリシックを許容 1 Modular Monolith ⼩さな Monolith 3 Modular Monolith 3 新たな ⼩さな Monolith 凝集度で 分割 凝集度で分割しつつ ⼩さなモノリスは許容 5 凝集度の⾼いモジュール 適切な分離

Slide 59

Slide 59 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. どのラインで分離するか︖ • マイクロサービスファーストだとマイクロサービスで分離する (マインドセット) • モノリスファーストだと、複数のモノリスと、モノリス内部のモジュール で分離(できる) • ビジネスの初期段階では、ドメイン境界が曖昧 • モノリスからマイクロサービス移⾏は、全体移⾏であるわけない、 部分的に⼩さなポーションをマイクロサービスにする • Big-Bang 的な移⾏にしない • 価値を⽣む箇所でAgilityが必要な部分 • モノリスは消えない、消す必要もない

Slide 60

Slide 60 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 統治できない分割は、分割統治ではない • コンポーネントが増える • 全体のスローダウンを招いてないか • 分割したもののオーナーシップをチームにまかせる • 全体統制のままであればそれは組織的にはモノリシックのまま / 分散モノリス 在庫ドメイン 在庫数の 取得 ⽀払い 決済ドメイン Endpoint Endpoint デプロイ時の同時性制約 / 相互依存

Slide 61

Slide 61 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda を Monolithic に運⽤する

Slide 62

Slide 62 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Layer の使い⽅に注意 • Lambda Layer は枯れた⾮機能要件のためにつかう (better) • Extension (サイドカー) の導⼊には良い • on goingで進化、開発している部分には適さない • 特に⾮スクリプト⾔語 • package managerに管理を委譲するか、あえて共通化しない 機能要件 ⾮機能要件 成熟 途上 Lambda Layer Package Manager スクリプト⾔語

Slide 63

Slide 63 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda に対する設定の注⼊ • Lambda は、設定変更を⼆つの層で考える • 1層⽬ – Lambda 関数⾃体の設定変更 • e.g メモリ、/tmp 領域、サービスインテグレーション 、、、etc. • Cold Start する • 2層⽬ – Lambda 関数の上にのるアプリケーションビジネスロジックの変更 • e.g. feature flag、debug mode 、、、etc. • Lambda関数のデプロイを伴うと、Cold Start するが、、、 Lambda Configuration Application Configuration 1層⽬ 2層⽬

Slide 64

Slide 64 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS AppConfig によるロジックと設定の分離 デプロイ戦略 AWS AppConfig AWS Lambda 新 設 定 初期化時に取得し TTL付きキャッシュ しておく Pull Pull 初期化時に取得し TTL付きキャッシュ しておく Parameter Storeなど Parameter Storeなど ここでの設定とはLambda サービスの設定ではなく、アプリケーション内のロジックにおける設定のこと 例. フィーチャーフラグ on/off

Slide 65

Slide 65 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 設定の注⼊における Lambda デザイン • Lambda における設定の変更 • モノリシック Lambda における設定の注⼊ • Cold Start を併発せずに、設定を注⼊ https://docs.aws.amazon.com/ja_jp/a ppconfig/latest/userguide/appconfig- integration-lambda-extensions.html AWS Lambda Lambda function AppConfig Extension Configuration Cache AWS SDK AWS AppConfig

Slide 66

Slide 66 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Lambda Web Adapter • HTTP request のための エントリーポイント Proxy https://speakerdeck.com/_kensh/web-frameworks-on-lambda

Slide 67

Slide 67 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Monolithic Lambda の ColdStart • リクエスト – レスポンスで利⽤されないモジュールを抱えることに • 初回⽴ち上がりは Latency がのるが、、、 • ⽴ち上がると Does many things︕

Slide 68

Slide 68 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Snap Start • Cold Start 抑制のためのメモリキャプチャとレジューム Invoke API warm start ? Is snapshot available? Create a snapshot Resume the snapshot Invoke handler Complete Invocation No No Yes

Slide 69

Slide 69 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Multi-lang Snap Start が欲しい • Snap Start は 2023.06 時点で、Java11,17 (Corretto) のみが対応 • 次にどのランタイムの対応を期待していますか︖ • ぜひ皆様の声を AWS に届けてください。

Slide 70

Slide 70 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Multi-lang Snap Start が登場した後の期待感 • Lambda 関数は single thread / single process モデルであるため与え られたリソース (CPU/メモリ) が 単⼀リクエストのために専有 • これにより、プログラミング実装の考慮点を削減することを期待 • Lambda 特有の実⾏モデルに対応した Web Framework OSS が登場 することを期待したい • それは Lambda専⽤の Framework ではなく、Function as a Service (FaaS) を プラットフォームとする 汎⽤Frameworkとなっても良い

Slide 71

Slide 71 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Key takeaway

Slide 72

Slide 72 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Key takeaway • AWS Lambda の実⾏モデルを理解することで 本当に モノリスに⾏く べきかどうかを判断する • モノリス⾃体は単なるデザインの選択肢 / 悪ではない • Lambda ⽂脈でのモノリスとコンテナ⽂脈のモノリスはサイズ感が異なる • 開発初期にはモノリスが許容されることは多い / モノリスファースト • モノリスから、アーキテクチャ進化できるようにしておく • Snap Start の Multi-lang 対応へのリクエストを是⾮︕

Slide 73

Slide 73 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Thank you! © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Kensuke Shimokawa Amazon Web Services Japan Snr. Serverless Specialist https://speakerdeck.com/_kensh https://qiita.com/_kensh

Slide 74

Slide 74 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Please complete the session survey © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.