З 1 серпня 2025 AWS почне враховувати час cold start у вартості виклику Lambda. Раніше цей час був безкоштовний для ZIP-функцій із managed runtime — більше ні 😐
INIT-фаза буде включена у Billed Duration для всіх типів функцій. В CloudWatch ти побачиш:
Duration: 250ms | Billed Duration: 351ms | Init Duration: 101ms — раніше було 250ms.Cold start - це коли Lambda створює нове оточення для функції:
- Завантажує код (під капотом код в амазоні завантажується з S3 бакету)
- Ініціалізує runtime
- Запускає статичний код поза handler
Warm start - повторне використання вже існуючого середовища. Код у INIT більше не виконується, одразу йде handler. Це значно швидше.
Як зменшити час cold start?
1. Оптимізуй розмір функції
- У Node.js уникай
import * as AWS, краще import S3 from "aws-sdk/clients/s3" - Краще використовувати
aws-sdk v3, який дозволяє імпортувати лише потрібні клієнти, наприклад: import { S3Client } from "@aws-sdk/client-s3" - Використовуй
esbuild або інший bundler для мінімізації залежностей2. Ініціалізуй об'єкти поза handler
Наприклад, створення підключення до бази, клієнта до S3 чи DynamoDB — краще робити ОДИН раз у INIT:
Node.js
const mysql = require('mysql2/promise');
const conn = await mysql.createConnection({ /* creds */ }); // INIT
exports.handler = async (event) => {
const [rows] = await conn.query("SELECT * FROM demo"); // Fast!
return rows;
};
Python
import pymysql
conn = pymysql.connect(host='host', user='user', password='pass') # INIT
def lambda_handler(event, context):
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM demo")
return cursor.fetchall()
3. Уникай непотрібних залежностей — не тягни весь aws-sdk v2, не використовуй великі фреймворки без потреби.
- Наприклад,
aws-sdk v2 важить 50MB, а aws-sdk v3 — 1.5MB. - Використовуй
@aws-sdk/client-s3 замість aws-sdk для S3.самий правильний коментар до цього що я бачив - "initflation"
https://aws.amazon.com/blogs/compute/aws-lambda-standardizes-billing-for-init-phase/