ちょっと話題の記事

知らなくても困らないけど、知ると楽しいAWS Lambdaの裏側の世界 #devio2021

2021.10.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CX事業本部の岩田です。

クラスメソッドオンラインイベントのDevelopersIO 2021 Decadeで「知らなくても困らないけど、知ると楽しいAWS Lambdaの裏側の世界」というテーマでお話ししましたので、内容を簡単にご紹介します。

動画

スライド

内容

今回お話した内容は以下の4つのブログの内容をマージして簡略化したものになります。もし詳細な内容に興味があれば以下のブログも読んでみて下さい。

Lambda実行環境のアーキテクチャについて

Lambdaの実行環境は以下のようなレイヤ構成になっています。

この中で「ハイパーバイザ」のレイヤにあたるのがAWSが開発したOSSのソフトウェアFirecrackerです。クラウドベンダーがCaaSやFaaSのサービスを提供するために最適化されたVMMで

  • 仮想マシンが非常に高速に起動する
  • オーバーヘッドが小さい

といった特徴があります。Lambdaというサービスが提供開始された当初はFirecrackerというソフトウェアは存在しませんでしたが、Lambdaというサービスの中で実行される各ユーザーのワークロードの

  • 環境分離
  • パフォーマンス向上
  • 集約率の向上

といったことをモチベーションにAWSはFIrecrackerを開発しました。

以前のLambda実行環境はEC2モデルと呼ばれるレイヤ構成が利用されていましたが、Firecerackerが開発されたことで、順次Fireacrackeモデルと呼ばれる前述のレイヤ構成へと移行されました

同期実行

Lambdaの同期実行に利用されるコンポーネントに関する紹介です。同期実行は

  • Front End
  • Counting Service
  • Worker Manager
  • Worker
  • Placement Service
  • MicroManager

といったコンポーネントが強調することで実現されています。re:InventのセッションではMicroManagerというコンポーネントについては触れられていなかったのですが、Firecrackerの論文でMicroManagerに関する記載があったので、同期実行の裏で稼働するコンポーネントとして紹介しています。

非同期実行

非同期実行も最終的には同期実行のシーケンスと同じになりますが、同期実行に至るまでに諸々のコンポーネントが協調しています。

  • Poller
  • State Manager
  • Stream Tracker
  • Leasing Service

というコンポーネントに加え、SQSが重要な役割を果たしています。

AWSが公式に名言している資料は見つけられなかったのですが、re:Inventのスライドを見る限りDynamoDBも利用しているようです。

Lambdaのコンテナイメージ対応について

re:Invent2020で発表された新機能としてLambdaのパッケージ形式としてOCI準拠のコンテナイメージがサポートされたという機能があります。この機能の裏側で、Lambdaの実行基盤にどのような変更が発生したのか?コンテナイメージ形式のパッケージのパフォーマンスを最適化するためにどういった工夫がされているのか?といった点について解説しています。

Sparse filesystemと呼ばれるコンポーネントと3種のキャッシュを利用することでIOを最適化しているそうです。

まとめ

本セッションの元ネタとなったブログ等の紹介です。Lambdaの裏側を解説するようなセッションは、いつもLambdaチームのシニアプリンシパルエンジニアであるMarc Brookerさんがスピーカーを務めるので、詳しく知りたい方はMarcさんがスピーカーのセッションを追いかけるのがオススメです。

参考資料

Youtube動画の概要欄でも紹介していますが、以下の4つの動画を見ていただくと色々と理解が深まります。興味があればご参照下さい。