AWS Lambda

AWS Lambda

執筆済 ソフトウェア開発インフラ

AWS の FaaS。2014 年に登場し、 この分野を切り開いた。

実行モデル#

イベント(HTTP、S3 への配置、キュー、定期実行)
   ↓
Lambda が実行環境を用意(または再利用)
   ↓
ハンドラ関数を呼ぶ
   ↓
結果を返す
js
export const handler = async (event) => {
  return { statusCode: 200, body: JSON.stringify({ ok: true }) };
};

課金#

料金リクエスト数+(実行時間×メモリ)

メモリを増やすと CPU も比例して増える。 そのため、メモリを増やして実行時間が短くなれば 総額が下がることがある。 最適点は測定して決める。

実行環境の再利用#

コンテナは呼び出し後もしばらく保持され、再利用される。

js
const db = createClient();       // ← 初期化はハンドラの外(再利用される)
export const handler = async () => { await db.query(...); };
  • ハンドラ外の初期化はコールドスタート時のみ実行される
  • /tmp の内容も残る(ただし当てにしない)
  • グローバル変数に前の呼び出しの状態が残るので、 利用者データを持たせない

Firecracker#

Lambda の隔離は軽量 VM(Firecracker)で行われる。

  • コンテナより強い隔離
  • 起動が 125 ms 程度と速い
  • 異なる利用者のコードを同じ物理機で安全に動かせる

コンテナの 隔離の弱さを、VM の強さで補う設計。

制限#

項目 上限
実行時間 15 分
メモリ 10 GB
一時領域 512 MB〜10 GB
デプロイパッケージ 50 MB (zip) / 10 GB (コンテナイメージ)

参考文献#

ノート一覧を閉じる