Jak optimalizovat cenu AWS Lambda funkcí

Asi není potřeba představovat funkcionalitu lambda funkcí, která umožňuje vyvíjet doslova bezserverové aplikace (serverless computing), kterou dnes už nabízejí všichni významní poskytovatelé cloudových služeb, byť jim každý říká jinak: Amazon má AWS Lambda, Google má svá Cloud Functions a Microsoft Azure Functions.

Základní myšlenka i realizace od kteréhokoliv z dodavatelů skvělá. Podpora pro všechny dnes významné programovací jazyky, jako je JavaScript, Python, Go a další.

Nic nebrání začít roztrhávat funkce vaší aplikace do nezávislých, stateless (bezstavových) funkcí a jednoduše deployovat do cloudu…

Nicméně než začnete, měli byste vědět, že možná z jedním z nejvýznamnějších faktorů pro techologii lambda funkcí je i cenová politika, která toto řešení provází. Lamda funkce mohou výrazně snížit náklady na provoz vaší aplikace. A to přímo o nepřímo.

Přímo třeba tak, že platíte pouze za skutečně vykonaný kód. To znamená, že pokud jsem napsal funkci pro vystavení faktury (pro jednoduchost řekněme jen generování PDF dokladu, pak zaplatím kterémukoliv z poskytovateli jen za skutečně zrealizované volání mé funkce.

Zároveň odpadají další významné nepřímé náklady spojené například s provozem jakýchkoliv serverů zajišťujících prostředí a vše kolem pro běh aplikací a je jedno jestli fyzických nebo virtualizovaných. Ne že by tam už nebyly, ale provozuje je a stará se o ně někdo jiný a já za ně paušálně nemusím nic platit.

Dalším podpůrným argumentem pro úsporu nákladů je jednodušší deploy a vše co z toho vyplývá.

Kapitolou samou pro sebe je možnost automatického škálování, kterou lambda funkce nabízejí a které v podstatě umocňují úspory výše popsané a vedle toho nabízejí komfortní elastické prostředí bez toho, že byste museli stavět složité deploy CI/CD řešení.

Tím škálování si je potřeba představit i cestu dolů. To znamená, že pokud má služba se nepoužívá není potřeba aby kvůli ní běželo nespočet serverů o které se musíte starat tak či tak.

Samozřejmě nic není zadarmo…

A teď nemám na mysli přímé peníze a platby za samotný provoz, ale úsilí, které musíte vynaložit k tomu, abyste požadovaného efektu dosáhli.

Úplně opomenu a beru jako samozřejmé, že už máte nějakou tu bezstavovou aplikaci, lambda funkci, vyvinutou a už jste v situaci, že jí chcete nasazovat.

Než to uděláte, měli byste zvážit minimálně tyto aspekty:

Frekfence spouštění

Nezapomeňte na to, že platíte za každé spuštění vaší funkcionality. Úlevou vám může být, že všichni poskytovatelé nabízejí nějaké počet volání zdarma…

Efektivní kód

Pište pokud možno co nejefektivnější kód. Pokud vaše funkce poběží dlouho, může jí poskytovatel služby zabíjet… Pokud vaše fuknce bude náročná na RAM, opět může být zastřelena… Snažte se dělat jednu jedinou věc a tu co nejlépe.

Monitorujte přenášená data

Pokud už musíte nějaká data přenášet, pak se snažte zefektivnit i velikost přenášených dat. Váš poksytovatel vám bude určitě účtovat i trefik. Tohle v reálu budou drobné, ale znáte to: koruna ke koruně….

Tak kolik?

Základní info o ceně ASW Lambda najdete zde. Pěknou Python aplikaci pro kalkulaci pak najdete zde. Pěkný článek porovnávající jednotlivé poskytovatele pak najdete zde.

Vyplatí se to?

Určitě ano. A to hned několikrát. Ale musíte vědět přesně co a jak děláte.