Slide 1

Slide 1 text

知らなくても困らないけど、知ると楽しい AWS Lambdaの裏側の世界 2021/10/13 CX事業本部 MAD事業部 岩⽥ 智哉

Slide 2

Slide 2 text

AWS Lambda サーバーやクラスターについて検討することなくコードを実⾏できます。 料⾦は従量課⾦制です。 https://aws.amazon.com/jp/lambda/

Slide 3

Slide 3 text

サーバーやクラスタが どうなってるか 知りたい….

Slide 4

Slide 4 text

Lambda実⾏環境のアーキテクチャ ハードウェア ホストOS ハイパーバイザ ゲストOS サンドボックス環境 Lambda ランタイム Lambda関数 Inner サンドボックス アカウントを跨いで共有利⽤ Lambda関数ごとに分離

Slide 5

Slide 5 text

Lambda実⾏環境のアーキテクチャ ハードウェア ホストOS ハイパーバイザ ゲストOS サンドボックス環境 Lambda ランタイム Lambda関数 Firecracker

Slide 6

Slide 6 text

Firecrackerの概要 • AWSが開発したOSSのVMM • MicroVMを⾼速に起動可能 • 仮想化によるオーバーヘッドは最⼩限

Slide 7

Slide 7 text

Firecracker開発のモチベーション •環境分離 •ワークロードの集約率 •パフォーマンス ….etc

Slide 8

Slide 8 text

Firecrackerのロードマップ https://github.com/firecracker-microvm/firecracker/projects/13

Slide 9

Slide 9 text

やっぱり来ました https://dev.classmethod.jp/articles/lambda-support-graviton2-processor/

Slide 10

Slide 10 text

AWS Lambdaという サービスを構成する コンポーネントについて 10

Slide 11

Slide 11 text

同期実⾏ 11

Slide 12

Slide 12 text

同期実⾏時の裏で活躍するコンポーネント郡 • Front End • Counting Service • Worker Manager • Worker • Placement Service • MicroManager

Slide 13

Slide 13 text

Front End • Lambdaのinvoke APIを処理 • 呼び出し元が妥当な場合にLambda関数の実⾏を許可 • Lambda関数のメタデータをロード

Slide 14

Slide 14 text

Counting Service • Lambda関数の同時実⾏数を制御 • Lambda関数の同時実⾏数をトラッキング • 必要に応じてスロットリングを発⽣させる • 複数のAZに分散配置

Slide 15

Slide 15 text

Worker Manager • Lambda実⾏環境のアイドル/ビジーをトラッキング • 利⽤可能な実⾏環境に要求をスケジューリング • 環境変数やLambda実⾏ロールを設定 • Placement Service経由でWorkerをスケールアップ

Slide 16

Slide 16 text

Worker • ベアメタルEC2インスタンス(…のはず) • 数百〜数千のMicroVMを実⾏ • Innerサンドボックスを作成/管理

Slide 17

Slide 17 text

Placement Service • 密度が最⼤化されるようサンドボックスを配置 • WorkerをWorker Managerにリース • Workerの監視も担当 ※図はFirecracker: Lightweight Virtualization for Serverless Applicationsより引⽤

Slide 18

Slide 18 text

Micro Manager 18 • 各Worker上でFirecrackerのプロセスを管理 • Front EndからLambda実⾏環境にペイロードを中継 • ブート済みのMicroVMのプールを管理 ※「A Serverless Journey: AWS Lambda Under the Hood」ではMicro Managerに関する⾔及無し Micro ManagerについてはFirecrackerの論⽂で解説されている ※図はFirecracker: Lightweight Virtualization for Serverless Applicationsより引⽤

Slide 19

Slide 19 text

同期実⾏のシーケンス例 ※画像はre:Invent2018のSRV409 A Serverless Journey: AWS Lambda Under the Hoodより引⽤ https://www.slideshare.net/AmazonWebServices/a-serverless-journey-aws-lambda-under-the-hood-srv409r1-aws-reinvent-2018

Slide 20

Slide 20 text

⾮同期実⾏

Slide 21

Slide 21 text

⾮同期実⾏も基本は同期実⾏ • ⾮同期実⾏の裏側も最終的には同期実⾏ • 同期実⾏に⾄るまでのプロセスは微妙に異なる • Asynchronous(イベントソース) • Stream(ストリーミングソース)

Slide 22

Slide 22 text

⾮同期実⾏時の裏で活躍するコンポーネント郡 •SQS •Poller •State Manager •Stream Tracker •Leasing Service

Slide 23

Slide 23 text

Poller • イベントデータを消費して処理するコンポーネント • イベントソースの場合はSQSをポーリング • ストリーミングソースの場合はストリーミングソー スからデータを受信

Slide 24

Slide 24 text

State Manager • イベントソースの場合にスケーリングを管理 • Leasing Service経由でPollerの割り当てを⾏う • Lambda関数の同時実⾏数に応じてキューを⽣成 • 状態遷移を監視しメトリクスを作成

Slide 25

Slide 25 text

Stream Tracker • ストリーミングソースの場合にスケーリングを管理 • シャード数に応じてPollerのリースを⾏う • Lambda関数の設定やストリーミングソースの更新 を定期的にチェック

Slide 26

Slide 26 text

Leasing Service • Pollerの割当と解放を⾏う • Pollerのヘルスチェックも担当 • Stream Trackerに対してPollerの割当/解放APIを提供

Slide 27

Slide 27 text

⾮同期実⾏のシーケンス例 ※画像はre:Invent2019のSVS405 A serverless journey: AWS Lambda under the hoodより引⽤ https://d1.awsstatic.com/events/reinvent/2019/REPEAT_1_A_serverless_journey_AWS_Lambda_under_the_hood_SVS405-R1.pdf

Slide 28

Slide 28 text

Pollerのリース状況はDynamoDBで管理︖ 28 ※画像はre:Invent2019のSVS405 A serverless journey: AWS Lambda under the hoodより引⽤ https://d1.awsstatic.com/events/reinvent/2019/REPEAT_1_A_serverless_journey_AWS_Lambda_under_the_hood_SVS405-R1.pdf

Slide 29

Slide 29 text

コンテナイメージの サポート 29

Slide 30

Slide 30 text

Lambdaのコンテナイメージサポート • re:Invent2020で発表された新機能 • Lambda関数のパッケージとして従来のZIP形式に 加えてコンテナイメージ形式を追加でサポート • Lambdaの内部アーキテクチャにも⼀部変更が

Slide 31

Slide 31 text

Sparse filesystem • MicroVM専⽤の新しいコンポーネント • ディスクIOを処理するためのレイヤー • イメージのチャンクをオンデマンドでロード ※画像はre:Invent2020のSVS404 Deep dive into AWS Lambda security: Function isolationより引⽤ https://d1.awsstatic.com/events/reinvent/2020/Deep_dive_into_AWS_Lambda_security_Function_isolation_SVS404.pdf

Slide 32

Slide 32 text

3つのキャッシュでIOを⾼速化 •Dedicated local cache •Shared local cache •Shared AZ-local cache

Slide 33

Slide 33 text

コンテナイメージのIO ※画像はre:Invent2020のSVS404 Deep dive into AWS Lambda security: Function isolationより引⽤ https://d1.awsstatic.com/events/reinvent/2020/Deep_dive_into_AWS_Lambda_security_Function_isolation_SVS404.pdf Sparse filesystem Shared local cache Shared AZ-local cache Firecracker KMS Shared, ciphertexts only Dedicated, has plaintexts

Slide 34

Slide 34 text

まとめ • Lambdaの裏側はre:Invent等で情報公開されている • Marc Brookerさんのセッションを要チェック︕︕ • Lambdaの裏側について妄想するのは楽しい

Slide 35

Slide 35 text

今回のセッションの元ネタブログ

Slide 36

Slide 36 text

今回のセッションの元ネタブログ、のさらに元ネタ

Slide 37

Slide 37 text

No content