FaaS jako stavební kámen serverless architektur
Function as a Service (FaaS) abstrahuje servery a provozní správu tak, že vývojář nasazuje pouze funkce reagující na události. Dvě nejrozšířenější platformy v enterprise sféře jsou AWS Lambda a Azure Functions. Obě škálují na požádání, účtují podle skutečného běhu a integrují se do bohatých ekosystémů služeb. Liší se však v detailech spouštěčů, modelu vývoje, škálování, síťové integrace, observability, cen a řízení stavu. Tento článek poskytuje technicky hluboké srovnání a doporučení pro praxi.
Architektura a spouštěče (triggers)
- AWS Lambda: spouštění přes event sources (S3, SQS, SNS, DynamoDB Streams, Kinesis, EventBridge, API Gateway/ALB, CloudWatch Events/cron). Podporuje i Function URL pro přímý HTTP vstup bez API Gateway a Lambda@Edge v CDN CloudFront.
- Azure Functions: spouští se přes bindings & triggers (HTTP, Timer, Queue/Service Bus, Event Grid, Event Hubs, Cosmos DB change feed, Blob/Files). Silná integrace s Azure Storage, API Management a Event Grid.
Bindings (Azure) zjednodušují přístup k I/O bez psaní klientů. Lambda cílí na generický event model a explicitní SDK práci se službami.
Runtimy, balení a deployment
- Jazyky: Node.js, Python, Java, .NET, Go; Lambda navíc custom runtime přes Runtime API. Azure Functions podporuje i PowerShell a Java s Isolated worker pro .NET.
- Balení: Lambda ZIP (typicky do stovek MB rozbaleně) nebo container image (ECR) pro komplexní závislosti. Azure Functions běží jako App Service workload – lze nasadit jako kód i kontejner (ACR).
- Infrastructure-as-Code: Lambda – AWS SAM, CDK, Terraform, Serverless Framework. Functions – Bicep/ARM, Terraform, Pulumi; lokální nástroje Azure Functions Core Tools.
- Verzování a směrování: Lambda versions/aliases s weighted traffic (canary). Azure deployment slots s řízeným přepnutím.
Škálování, souběh a studené starty
- Auto-scale: Lambda škáluje podle příchozích událostí – každé souběžné spuštění je izolovaná instance. Azure škáluje instanční „workers“ podle zátěže a přiděluje jim invokace funkcí.
- Cold start: inicializace runtime a načtení balíčku. Zmírnění: Lambda Provisioned Concurrency a (zejména pro JVM) SnapStart. Azure: Premium plan s předohřátými instancemi.
- Limity a řízení: v obou platformách lze nastavovat concurrency limits pro ochranu downstream služeb; integrační služby (SQS/Service Bus) mají vlastní retry a back-pressure.
Plány a modely účtování
- Lambda: cena = GB-sekundy (paměť × doba běhu) + počet žádostí. Vyšší paměť zvyšuje i CPU/IOPS. Úspory přes Compute Savings Plans a volbu Graviton/arm64.
- Azure Functions: Consumption (platba za běh + transakce), Premium (předohřátí, VNET, vyšší výkon) a Dedicated (App Service plan). Náklady ovlivňuje i přenesený objem přes bindings.
U obou platforem je klíčové zkrátit běh, minimalizovat zápisy do vzdálených úložišť a volit adekvátní paměť → vyšší CPU sníží runtime a často i cenu.
Síť a konektivita: VPC/VNet, privátní přístup
- AWS: Lambda v privátním VPC má ENI a může přistupovat k RDS/ElastiCache; pro internetový odchozí provoz je třeba NAT. Využívejte VPC endpoints pro přímý přístup k S3/Secrets Manager bez internetu.
- Azure: VNet Integration (odchozí), Private Endpoints a Private Link pro služby jako Storage/Key Vault; u Premium plánu je VNet podpora plnohodnotnější.
Pamatujte na connection reuse a pooling, případně zprostředkující proxy: AWS RDS Proxy, Azure SQL connection pooling/Managed Identity → drasticky sníží load na DB při škálování.
Stav, workflow a dlouhotrvající úlohy
- Lambda: stav mimo funkci (DynamoDB, S3, ElastiCache). Koordinace přes AWS Step Functions (stavy, retry, paralelizace, map state). Plánování/cron přes EventBridge.
- Azure: Durable Functions (orchestrator, entity functions) – vzory fan-out/fan-in, human interaction, saga. Časovače přes Timer Trigger.
Pro >15 minut běhy používejte workflow a dělení práce (chunking), ne „nekonečné“ funkce. Streamové ingestion řešte přes Event Hubs/Kinesis + consumer groups/shards.
Observabilita a tracing
- AWS: CloudWatch Logs/Metrics, Embedded Metrics, distribuovaný tracing přes AWS X-Ray, podpora OpenTelemetry (OTel Collector jako extension). EventBridge Pipes s DLQ a metrikami.
- Azure: Application Insights (telemetrie, dependency map, Kusto dotazy), Log Analytics, nativní OTel. Bindings emitují telemetrii automaticky.
Standardizujte korelační ID, logujte strukturovaně (JSON), nastavte alerts/SLO na p95 latenci, error rate a throttle/lag metriky front.
Bezpečnost, identita a tajemství
- Identita běhu: Lambda execution role (IAM); Azure Managed Identity (MSI). Přidělujte nejnižší nutná oprávnění (least privilege), žádné statické klíče v kódu.
- Secrets: AWS Secrets Manager/SSM Parameter Store, Azure Key Vault. Cacheujte hodnoty v rámci „hot“ runtime, respektujte rotaci.
- Edge bezpečnost: API Gateway / API Management pro rate-limiting, auth (JWT/OAuth2), WAF, mTLS.
Výkonnost: optimalizace cold-startu a běhu
- Balíček: minimalizujte velikost a počet závislostí, používejte tree-shaking, modulární import, lokální bundling (esbuild, SWC).
- Inicializace: přesuňte těžké inicializace mimo handler (využití znovupoužitého kontextu), lazy-load dle potřeby.
- IO a storage: maximalizujte přístup do paměti, používejte dočasné úložiště (
/tmp) s rozumným limitem; dávkujte requesty do downstreamu. - Výběr paměti: testujte různé alokace – vyšší paměť = více CPU → kratší runtime a často nižší cena.
Vzory integrace s událostmi a frontami
- At-least-once: Lambda ze SQS/Kinesis a Functions ze Service Bus/Event Hubs doručují s opakováním → idempotence, deduplikace (klíč, hash), tranzakční outbox.
- DLQ/Poison queue: po vyčerpání retry přesouvejte zprávy do DLQ a spouštějte kompenzační/analytické toky.
- Back-pressure: omezte batch size, nastavte max concurrent u triggerů, škálujte spotřebitele oproti kapacitě DB/externích API.
HTTP/API scénáře
- AWS: API Gateway (REST/HTTP) s authorizéry (JWT/Lambda), směrování, validace, transformace. Alternativa: ALB target (Lambda) nebo Function URL pro jednoduché veřejné endpointy.
- Azure: nativní HTTP trigger s route šablonami, integrace s Azure API Management (kvóty, produkty, verze, bezpečnost).
Pro streaming responses a velká payloady zvažte proxy v PaaS (App Service/Container Apps) nebo edge funkce (CloudFront Functions/Workers) dle latencí a limitů.
Limity prostředí a file-system
- Čas běhu: typicky do 15 minut na invokaci (Lambda i Azure Consumption). Dlouhé práce rozdělte na menší kroky a orchestrace.
- Paměť/CPU: Lambda až jednotky GB s lineárním CPU scalingem; Functions škálují výkon dle plánu (Premium/Dedicated mají více CPU/RAM).
- Ephemeral storage: dočasné
/tmp(zvýšitelný limit) – vhodné pro kompresi, dočasné soubory, ne pro trvalá data. - Vrstvy/rozšíření: Lambda Layers a Extensions (telemetrie, bezpečnost); Azure Extension bundles pro bindings.
CI/CD, testování a lokální vývoj
- Lokální běh: Lambda – sam local, LocalStack; Azure – func start (Core Tools) s emulací Storage/Queues.
- Testy: jednotkové (handler izolace), kontraktační (schémata eventů), integrační (skutečné služby v sandboxu), chaos testy (latence/timeouty).
- Release: Lambda aliases pro canary, Azure deployment slots s postupným přepnutím. Automatická verifikace zdraví (synthetic checks) po nasazení.
Bezstavost vs. „teplý“ kontext
Funkce musí být bezstavové. „Teplý“ kontext (znovupoužití procesu) je optimalizační výhoda, ne spolehlivá vlastnost. Cache (klienti DB, tajemství, lookup tabulky) držte v globálním scope a navrhujte bezpečně pro paralelismus.
Funkce na okraji sítě a hybridní běh
- AWS: Lambda@Edge a CloudFront Functions pro extrémně nízkou latenci při manipulaci s HTTP hlavičkami a směrováním.
- Azure: Functions lze provozovat v Container Apps/Kubernetes s KEDA (scale-to-zero dle metrik), případně v Edge Zones.
Srovnávací tabulka
| Oblast | AWS Lambda | Azure Functions |
|---|---|---|
| Triggery | S3, SQS, SNS, Kinesis, EventBridge, API GW/ALB, CloudWatch, DynamoDB Streams | HTTP, Timer, Blob, Queue/Service Bus, Event Grid, Event Hubs, Cosmos DB |
| Workflow | Step Functions (vizuální stavové stroje) | Durable Functions (orchestrátory, entity) |
| Cold-start mitigace | Provisioned Concurrency, SnapStart (Java) | Premium plan (warm instances), Always-On |
| HTTP publikace | API Gateway/ALB, Function URL | HTTP trigger, API Management |
| Identita | IAM role, resource-based policies | Managed Identity (MSI), AAD role |
| Observabilita | CloudWatch, X-Ray, OTel | App Insights, Log Analytics, OTel |
| Síť | VPC + ENI, VPC endpoints | VNet Integration, Private Link |
| Deployment | SAM/CDK/Serverless; versions/aliases | Bicep/ARM/Terraform; deployment slots |
Bezpečnostní a provozní „guard-rails“
- Implementujte rate limiting a timeouts na všech hranách; definujte DLQ a retry policy.
- Vynucujte least privilege (IAM/AAD), auditujte přístupy k tajemstvím, logujte všechny administrativní akce.
- Nastavte budgets & alerts (náklady/počty invokací) a sledujte anomálie provozu.
Typické anti-patterny
- Chatty IO: synchronní volání DB/API v cyklu bez dávkování → použijte bulk operace a asynchronní fronty.
- Neřízený paralelismus: škálování „naplno“ proti neelastickým backendům → nastavte reserved/concurrent limits a back-pressure.
- Velké monolitické balíčky: zbytečně dlouhé cold-starty → dělení do menších funkcí a sdílených knihoven.
- Stav v paměti: spoléhat na „warm“ instanci pro business stav → trvalý stav držte v managed úložištích.
Rozhodovací rámec: kdy Lambda a kdy Functions
- Cloudový kontext: AWS-centrické prostředí (DynamoDB, S3, Kinesis) → Lambda; Azure (AAD, Service Bus, Cosmos DB) → Functions.
- Workflow požadavky: komplexní orchestraci s lidskou interakcí → Durable Functions; event-driven micro-orchestrace a integrace s AWS službami → Step Functions.
- HTTP/API: enterprise API management, verze a monetizace → Azure APIM + Functions; masivní event vstupy a flexibilní routing → API Gateway + Lambda.
- Latence a cold-starts: kritické latence → Lambda Provisioned Concurrency nebo Azure Premium, případně edge funkce.
Check-list pro produkční nasazení
- Definované SLO (latence p95, chybovost, dostupnost) a error budget.
- Alerting na throttles, DLQ depth, invocation errors, náklady.
- Idempotence u event processing, korelace událostí, audit trail.
- Bezpečný přístup k tajemstvím (MSI/IAM), klíče mimo kód, rotace.
- Canary deploy (aliases/slots), automatický rollback na základě metrik.
Závěr: praktická doporučení
Lambda i Azure Functions umožňují budovat vysoce škálovatelné a ekonomické systémy, pokud jsou navrženy event-driven, bezstavově a s důrazem na idempotenci, observabilitu a back-pressure. Volbu platformy veďte především ekosystémem připojených služeb, požadavky na orchestraci a principy správy identity. Investice do CI/CD, testů (včetně chaos/failover scénářů), správné konfigurace sítí a řízení nákladů rozhoduje o úspěchu více než samotná volba FaaS. Správně navržené funkce pak tvoří lehké, bezpečné a snadno vyvíjitelné stavební bloky moderních serverless aplikací.
