Spis treści 12 sekcji
- EC2 vs Lambda - dwie filozofie compute w AWS
- Amazon EC2 - wirtualny serwer w chmurze
- AWS Lambda - serverless compute
- Porównanie szczegółowe
- Porównanie kosztów - konkretne scenariusze
- Kiedy wybrać EC2?
- Kiedy wybrać Lambda?
- Podejście hybrydowe - najczęstsze w praktyce
- Cold start - jak sobie radzić?
- Podsumowanie - decision tree
- Najczęściej zadawane pytania (FAQ)
- Następny krok
- EC2 to wirtualny serwer z pełną kontrolą - idealny do aplikacji 24/7, GPU, długich procesów
- Lambda to serverless - płacisz tylko za wykonanie, idealna do event-driven i nieregularnego ruchu
- Przy stałym ruchu 24/7 EC2 z Reserved Instances jest tańsze; przy sporadycznym ruchu Lambda wygrywa
- W praktyce najczęściej stosuje się podejście hybrydowe - główna aplikacja na EC2, przetwarzanie w tle na Lambda
- Nie wiesz co wybrać? Zacznij od Lambda, migruj do EC2 gdy potrzeba
EC2 vs Lambda - dwie filozofie compute w AWS
Amazon EC2 i AWS Lambda to dwie najpopularniejsze usługi obliczeniowe w AWS, ale reprezentują fundamentalnie różne podejścia. EC2 to klasyczny serwer wirtualny - Ty zarządzasz maszyną. Lambda to serverless - AWS zarządza wszystkim, Ty piszesz tylko kod.
Wybór między nimi to jedna z pierwszych decyzji architektonicznych, które podejmujesz przy nowym projekcie. I nie ma jednej dobrej odpowiedzi - wszystko zależy od Twojego use case. W projektach, które prowadziłem, prawie zawsze kończyło się na użyciu obu usług jednocześnie. W tym artykule pokażę konkretne scenariusze, porównanie kosztów i checklist, który pomoże Ci podjąć decyzję.
Amazon EC2 - wirtualny serwer w chmurze
EC2 (Elastic Compute Cloud) to wirtualna maszyna, którą uruchamiasz w chmurze AWS. Dostajesz pełny dostęp do systemu operacyjnego - możesz zainstalować co chcesz, skonfigurować jak chcesz i masz pełną kontrolę.
Jak działa EC2?
- Wybierasz typ instancji (vCPU, RAM, network)
- Wybierasz AMI (obraz systemu - Amazon Linux, Ubuntu, Windows)
- Konfigurujesz sieć (VPC, subnet, security group)
- Uruchamiasz i łączysz się przez SSH/RDP
# Uruchomienie instancji EC2 przez AWS CLI
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type t3.micro \
--key-name my-key \
--security-group-ids sg-0123456789 \
--subnet-id subnet-0123456789
Zalety EC2
- Pełna kontrola - OS, runtime, biblioteki, konfiguracja systemu
- Brak limitu czasu wykonania - proces może działać godzinami, dniami, miesiącami
- GPU i specjalistyczny hardware - instancje p5, g5, inf2 dla ML/AI
- Stateful applications - dane na dysku EBS persistują między restartami
- Przewidywalna wydajność - brak cold startów
- Reserved Instances / Savings Plans - rabaty 30-60% przy stałym obciążeniu
Wady EC2
- Musisz zarządzać serwerem - patche, aktualizacje, monitoring
- Płacisz za idle - serwer kosztuje, nawet gdy nic nie robi
- Skalowanie wymaga konfiguracji - Auto Scaling Group, Launch Template, ALB
- Odpowiedzialność za bezpieczeństwo OS - Shared Responsibility Model
AWS Lambda - serverless compute
Lambda to zupełnie inne podejście: piszesz funkcję, wgrywasz do AWS i Lambda uruchamia ją w odpowiedzi na zdarzenia (eventy). Nie masz serwera, nie martwisz się o OS, skalowanie jest automatyczne.
Jak działa Lambda?
- Piszesz funkcję (Python, Node.js, Java, Go, .NET, Ruby)
- Konfigurujesz trigger (API Gateway, S3, SQS, EventBridge, CloudWatch)
- Lambda uruchamia Twoją funkcję przy każdym evencie
- Skaluje automatycznie - od 0 do tysięcy równoległych wykonań
# Przykład funkcji Lambda (Python)
import json
def handler(event, context):
name = event.get("name", "World")
return {
"statusCode": 200,
"body": json.dumps({"message": f"Hello, {name}!"})
}
Zalety Lambda
- Zero zarządzania serwerem - AWS patchi, aktualizuje, skaluje
- Pay-per-use - płacisz za requesty i czas wykonania, $0 za idle
- Automatyczne skalowanie - od 0 do 1 000 równoległych wykonań (domyślnie, limit można zwiększyć do 10 000+)
- Event-driven - reaguje na S3 upload, SQS message, API request, cron
- Darmowy tier - 1M requestów + 400 000 GB-sekund/miesiąc za darmo (na zawsze, szczegóły w dokumentacji Lambda)
Wady Lambda
- Cold start - pierwsze wykonanie po nieaktywności trwa dłużej (100ms-3s zależnie od runtime)
- Limit 15 minut - funkcja nie może działać dłużej
- Limit pamięci 10 GB - nie dla heavy compute
- Brak stanu - każde wykonanie jest niezależne, potrzebujesz DynamoDB/S3 na dane
- Vendor lock-in - Twoje Lambda są ściśle związane z ekosystemem AWS
- Ograniczone debugowanie - trudniej debugować niż lokalny serwer
Porównanie szczegółowe
| Cecha | EC2 | Lambda |
|---|---|---|
| Zarządzanie serwerem | Ty zarządzasz (OS, patche) | AWS zarządza wszystkim |
| Model cenowy | Za sekundę działania instancji | Za request + czas wykonania |
| Koszt przy braku ruchu | Płacisz (serwer działa) | $0 |
| Max czas wykonania | Bez limitu | 15 minut |
| Max pamięć | Do 32 TB (u7in-32tb) | 10 GB |
| Skalowanie | Auto Scaling (konfiguracja) | Automatyczne (0 do 10 000) |
| Cold start | Nie | Tak (100ms - 3s) |
| Języki programowania | Dowolne | Python, Node.js, Java, Go, .NET, Ruby |
| GPU / akceleratory ML | Tak (p5, g5, inf2) | Nie |
| Persistent storage | EBS (trwałe dyski sieciowe) | Brak (użyj S3/DynamoDB) |
| SSH/RDP access | Tak | Nie |
| Czas uruchomienia | 1-3 minuty | Milisekundy (po cold start) |
Porównanie kosztów - konkretne scenariusze
Scenariusz 1: API obsługujące 100 000 requestów/dzień
| Parametr | EC2 | Lambda |
|---|---|---|
| Konfiguracja | t3.micro 24/7 | 256MB, 200ms/request |
| Koszt/miesiąc | ~$7.50 | ~$1.50 |
| Skalowanie | Ręcznie / ASG | Automatyczne |
Zwycięzca: Lambda - taniej i zero zarządzania.
Scenariusz 2: Aplikacja webowa z bazą danych, 24/7
| Parametr | EC2 | Lambda |
|---|---|---|
| Konfiguracja | t3.medium + RDS | Lambda + API Gateway + RDS |
| Koszt compute/miesiąc | ~$30 | ~$35 (API Gateway jest droższe) |
| Cold start issue | Nie | Tak (problemy z UX) |
Zwycięzca: EC2 - przy stałym ruchu EC2 (zwłaszcza z RI) jest tańsze, bez cold startów.
Scenariusz 3: Przetwarzanie plików wgrywanych do S3
| Parametr | EC2 | Lambda |
|---|---|---|
| Konfiguracja | t3.small czekający na pliki | Trigger S3 -> Lambda |
| Ruch | 50 plików/dzień, 10s przetwarzania | 50 plików/dzień, 10s przetwarzania |
| Koszt/miesiąc | ~$15 (serwer czeka 99.9% czasu) | ~$0.01 |
Zwycięzca: Lambda - event-driven use case, EC2 marnuje zasoby.
Kiedy wybrać EC2?
- Aplikacja działa 24/7 ze stałym obciążeniem
- Potrzebujesz pełnej kontroli nad OS (custom kernel, drivers)
- Potrzebujesz GPU (ML training, video encoding)
- Procesy trwające dłużej niż 15 minut
- Potrzebujesz dużo pamięci RAM (>10 GB)
- Stateful application z danymi na dysku
- Legacy aplikacje, które trudno przerobić na serverless
- Compliance wymaga dedykowanego hosta (EC2 Dedicated Hosts)
Kiedy wybrać Lambda?
- Event-driven processing (S3 upload, SQS message, API request)
- Nieregularny ruch (spikes i okresy bez ruchu)
- Krótkie operacje (<15 minut)
- Chcesz zero zarządzania infrastrukturą
- Mikroserwisy i API
- Cron jobs (EventBridge + Lambda)
- Startup/MVP - szybko i tanio
- Przetwarzanie danych (ETL, transformacje)
Podejście hybrydowe - najczęstsze w praktyce
W realnych projektach rzadko wybierasz "albo EC2, albo Lambda". Najczęściej używasz obu:
- Główna aplikacja na EC2 (lub ECS/EKS) - obsługuje ruch webowy 24/7
- Przetwarzanie w tle na Lambda - resize zdjęć po upload, wysyłka emaili, ETL
- Cron jobs na Lambda - raporty, cleanup, scheduled tasks
- Webhooks na Lambda + API Gateway - integracje z zewnętrznymi serwisami
# Typowa architektura hybrydowa:
# EC2 (ALB) -> główna aplikacja webowa
# S3 upload -> Lambda -> resize image -> S3
# EventBridge (cron) -> Lambda -> generate report -> SES email
# API Gateway -> Lambda -> webhook handler -> SQS -> EC2 worker
Nie musisz wybierać jednego. Używaj odpowiedniego narzędzia do odpowiedniego zadania.
Cold start - jak sobie radzić?
Cold start to największy minus Lambda. Występuje, gdy AWS musi uruchomić nowe środowisko dla Twojej funkcji (nie było wykonań od jakiegoś czasu lub przychodzi więcej ruchu niż dostępne "ciepłe" instancje).
Typowe czasy cold start:
| Runtime | Cold start |
|---|---|
| Python | 100-300ms |
| Node.js | 100-300ms |
| Go | 50-100ms |
| Java | 500ms-3s |
| .NET | 300ms-1s |
Sposoby na minimalizację cold start:
- Provisioned Concurrency - utrzymuj N "ciepłych" instancji Lambda (kosztuje extra)
- Mniejsze paczki - im mniejszy package, tym szybszy cold start
- Wybierz Python/Node.js/Go zamiast Java/.NET
- SnapStart (Java, Python, .NET) - AWS cache'uje zainicjalizowane środowisko (dla Javy bez dopłat, dla Pythona i .NET dodatkowo płatny)
Podsumowanie - decision tree
- Czy zadanie trwa dłużej niż 15 minut? -> EC2
- Czy potrzebujesz GPU? -> EC2
- Czy to event-driven (reaguje na zdarzenia)? -> Lambda
- Czy ruch jest nieregularny z okresami zero? -> Lambda
- Czy to startup/MVP i chcesz szybko? -> Lambda
- Czy to stały ruch 24/7? -> EC2 (taniej z RI/SP)
- Nie wiesz? -> Zacznij od Lambda, migruj do EC2 gdy potrzeba
Najczęściej zadawane pytania (FAQ)
Czy Lambda może zastąpić EC2 we wszystkich przypadkach?
Nie, Lambda ma ograniczenia, które w wielu scenariuszach dyskwalifikują ją jako zamiennik EC2. Maksymalny czas wykonania to 15 minut, limit pamięci to 10 GB, brak GPU i brak trwałego storage. Lambda nie nadaje się do długich procesów, ML trainingu, stateful aplikacji i legacy systemów. W praktyce najlepsze rozwiązanie to podejście hybrydowe.
Co to jest cold start w Lambda i jak go uniknąć?
Cold start to opóźnienie przy pierwszym wywołaniu funkcji Lambda po okresie nieaktywności. AWS musi zainicjalizować nowe środowisko wykonawcze, co trwa od 100ms (Python/Node.js) do 3 sekund (Java). Możesz zminimalizować cold start używając Provisioned Concurrency, mniejszych paczek deploymentowych, lekkich runtime'ów (Python/Go zamiast Java) lub AWS SnapStart (dostępny dla Javy, Pythona i .NET).
Czy Lambda jest zawsze tańsza od EC2?
Nie zawsze. Lambda jest tańsza przy sporadycznym, nieregularnym ruchu i gdy aplikacja ma okresy bez aktywności. Przy stałym, przewidywalnym obciążeniu 24/7 EC2 z Reserved Instances lub Savings Plans jest tańsze. Punkt przełomowy zależy od konkretnego use case - warto policzyć koszty obu opcji dla swojego scenariusza.
Czy mogę uruchomić kontenery Docker na Lambda?
Tak, od 2020 roku Lambda obsługuje obrazy kontenerowe do 10 GB. Możesz zbudować obraz Docker z Twoją funkcją i wgrać go do ECR. To przydatne, gdy masz złożone zależności lub chcesz wykorzystać istniejący Dockerfile. Jednak kontenerowe Lambda mają dłuższe cold starty niż standardowe paczki ZIP.
Następny krok
Jeśli dopiero zaczynasz z AWS, sprawdź nasz przewodnik jak zacząć z AWS.
Chcesz nauczyć się obu usług w praktyce? W naszym kursie AWS od podstaw przeprowadzi Cię przez uruchomienie EC2 i napisanie pierwszej funkcji Lambda krok po kroku.
Sprawdź też ile to kosztuje: Ile kosztuje AWS? - porównanie kosztów EC2 i Lambda w różnych scenariuszach. A jeśli chcesz poznać konteneryzację, przeczytaj Docker dla początkujących.
