CodeShot

EC2 در مقابل Lambda

EC2 یک ماشین مجازی همیشه-روشن است که کنترل کامل روی سیستم‌عامل و منابع آن دارید و هزینه‌اش بر اساس زمان روشن بودن سرور محاسبه می‌شود؛ Lambda یک تابع serverless است که تنها هنگام فراخوانی اجرا می‌شود، به‌صورت خودکار مقیاس می‌یابد و هزینه‌اش صرفاً بر اساس زمان اجرای واقعی است.

ویژگیEC2Lambda
مدل اجراسرور همیشه-روشنتابع رویدادمحور و بدون سرور
مدل هزینهبر اساس زمان روشن بودنبر اساس تعداد فراخوانی و زمان اجرا
مقیاس‌پذیریدستی یا Auto Scaling Groupخودکار و آنی
محدودیت زمان اجرانداردحداکثر ۱۵ دقیقه در هر فراخوانی

کِی از EC2 استفاده کنیم؟

برای برنامه‌های long-running، وابسته به state محلی یا با بار پیوسته و قابل پیش‌بینی (مثل یک وب‌سرور پرترافیک با کنترل کامل بر تنظیمات)، از EC2 استفاده کنید.

کِی از Lambda استفاده کنیم؟

برای پردازش‌های رویدادمحور و کوتاه‌مدت (پردازش یک فایل آپلودشده، webhook یا API با ترافیک نامنظم) که نیاز به مقیاس‌پذیری خودکار و صفر-هزینه در زمان بیکاری دارید، از Lambda استفاده کنید.

مثال EC2

aws ec2 run-instances --image-id ami-0abcdef --instance-type t3.micro   --key-name my-key --security-groups my-sg
# Instance runs continuously; you pay per hour whether it's busy or idle

مثال Lambda

def handler(event, context):
    file_key = event['Records'][0]['s3']['object']['key']
    process_file(file_key)
    return {"statusCode": 200}
# Runs only when triggered (e.g. S3 upload), scales to zero when idle

اشتباه رایج

استفاده از Lambda برای وظایف long-running یا CPU-heavy پیوسته که به محدودیت زمان اجرا (حداکثر ۱۵ دقیقه) و هزینه بالاتر نسبت به یک EC2 پیوسته می‌خورد؛ در طرف مقابل، نگه‌داشتن یک EC2 همیشه-روشن فقط برای اجرای گاه‌به‌گاه یک اسکریپت ساده، هزینه بیخودی برای زمان بیکاری ایجاد می‌کند.

جمع‌بندی

بار پیوسته و قابل پیش‌بینی با کنترل کامل → EC2؛ رویدادمحور، کوتاه‌مدت و نامنظم → Lambda.