コールドスタート
Lambda の初回呼び出し時に実行環境の初期化が発生し、レイテンシが増加する現象
AWSサーバーレス
コールドスタートとは
コールドスタートは、Lambda の初回呼び出し時に実行環境の初期化 (コンテナ起動、ランタイム初期化、コードロード) が発生し、レイテンシが増加する現象である。2 回目以降はウォームスタートで高速。
コールドスタート vs ウォームスタート
コールドスタートと ウォームスタート の違いを図で示す。
コールドスタート (初回):
コンテナ起動 → ランタイム初期化 → コードロード → ハンドラ実行
|←── 100ms〜数秒 ──→|←── 実行時間 ──→|
ウォームスタート (2回目以降):
ハンドラ実行
|←── 実行時間 ──→|
ランタイム別のコールドスタート時間
ランタイム別のコールドスタート時間を以下にまとめる。
| ランタイム | コールドスタート | 備考 |
|---|---|---|
| Node.js | 100〜300 ms | 軽量で高速 |
| Python | 100〜300 ms | 軽量で高速 |
| Go | 50〜100 ms | コンパイル済みバイナリ |
| Rust | 50〜100 ms | コンパイル済みバイナリ |
| Java | 500 ms〜数秒 | JVM の起動が遅い |
| .NET | 300〜800 ms | CLR の起動 |
コールドスタートの削減策
コールドスタートの削減策を以下にまとめる。
| 対策 | 効果 |
|---|---|
| メモリを増やす | CPU も比例して増加、初期化が高速化 |
| パッケージサイズを削減 | esbuild でバンドル、不要な依存を除去 |
| SDK v3 を使用 | v2 より軽量 |
| Provisioned Concurrency | 事前にウォーム状態を維持 |
| SnapStart (Java) | JVM のスナップショットを保存 |
Provisioned Concurrency
Provisioned Concurrency の例を示す。
MyFunction:
Type: AWS::Serverless::Function
Properties:
AutoPublishAlias: live
ProvisionedConcurrencyConfig:
ProvisionedConcurrentExecutions: 5
常に 5 つの実行環境をウォーム状態に維持する。コールドスタートが発生しないが、常時課金される。
初期化コードの最適化
初期化コードの最適化のコード例を示す。
// ハンドラ外: コールドスタート時に 1 回だけ実行
const db = new DynamoDBClient({});
export const handler = async (event: any) => {
// ハンドラ内: 毎回実行
const result = await db.send(new GetItemCommand({ ... }));
return { statusCode: 200, body: JSON.stringify(result) };
};
// db の初期化はコールドスタート時のみ、ウォームスタートでは再利用
コールドスタートの監視
コールドスタートの監視のコード例を示す。
// CloudWatch Logs Insights
// コールドスタートの割合を確認
filter @type = "REPORT"
| stats count() as total,
sum(strcontains(@message, "Init Duration")) as coldStarts
| display coldStarts / total * 100 as coldStartPercent
全体像を把握するには関連書籍も有用。
この記事は役に立ちましたか?
関連用語
関連する記事
あの有名 OSS のコードは、この本の影響を受けている
広く使われているオープンソースソフトウェアの設計には、特定の技術書の影響が色濃く反映されています。OSS のコードと技術書の関係を知ると、両方の理解が深まります。
README を書くように本を読む - エンジニアのための構造化読書法
エンジニアが日常的に書く README のフォーマットを読書に応用する方法を紹介します。目的・使い方・注意点の 3 点で本の内容を整理すると、知識の再利用性が飛躍的に高まります。
技術書の読書ログを GitHub で管理する - エンジニアらしい記録法
技術書の読書記録を GitHub リポジトリで管理する方法を紹介します。Markdown で読書ノートを書き、コミット履歴で読書の軌跡を残す、エンジニアならではの読書ログ術です。