Jak snadno postavit výkonné back-endy bez serveru

Vytváření obrazového procesoru na AWS Lambda

Setkání s Jeffem Barrem v AWS re: Invent

Začal jsem pracovat jako softwarový vývojář na plný úvazek v roce 2012. Vy jste to postavili, spustili jste to byla základní hodnota našeho malého týmu. Ale o serverech jsem nevěděl nic. Brzy jsem se musel učit o podsítích, vyvažovačích zatížení, databázových klastrech a dalších, abych podpořil kód, který jsem napsal. Vytváření softwaru, který řeší problémy, je pro mě zábavné, správa serverů není.

Na začátku roku 2016 jsem se zúčastnil setkání AWS. Na tomto setkání Sam Kroonenburg hovořil o tom, jak na AWS postavil cloudového gurua bez serverové architektury. Odhodilo mě to. Myšlenka použití AWS Lambda k vytváření webových aplikací bez správy nebo škálování serverů mě zahnula.

Od té doby jsem věnoval svůj volný čas učení a blogování o Serverless. Šest měsíců po tomto setkání mi Sam nabídl práci a nyní stavím systémy bez serverů na plný úvazek pro cloudového gurua.

Dozvědět se o Serverless má velký dopad na způsob, jakým buduji software. Serverless získal v roce 2016 spoustu hybnosti a zralosti. V každém případě nikdy nebyl lepší čas začít.

Co je (a není) bez serveru?

Stále existuje mnoho debat o tom, co je bez serveru. Právě teď závisí odpověď na tom, koho se zeptáte. Existují dvě otázky, co je produkt bez serveru a jaká je architektura bez serveru.

Produkt Serverless je plně spravován granulárním škálováním a granulární fakturací. Mezi produkty patří mimo jiné:

  • Vypočítat: AWS Lambda, Azure Functions a WebTask.
  • Úložiště: S3, DynamoDB a Firebase
  • Autentizace: Cognito, Auth0
  • Hledat: Algolia

Poznámka: Nezahrnuli jsme žádnou platformu jako službu (PaaS), jako jsou Amazon RDS, Heroku nebo Google App Engine. Za tyto služby platíte za hodinu a měřítko přidáním nebo odebráním podkladových serverů. Možná nebudete muset spravovat servery, ale musíte na ně stále myslet.

Co je architektura bez serveru? Architekturu bez serveru definuji jako:

Systém řízený událostmi, který využívá logiku a vytrvalost využívající FaaS a další plně spravované služby.

Pokud stále poškrábáte hlavu, nebojte se. To bude mít větší smysl, jakmile uvidíte příklad.

Začínáme s Serverless

Nejlepší způsob, jak se učit, je procvičovat. Předstírejme, že klient mě požádal, abych znovu objevil anonymní tváře na obrázcích.

Místo toho, aby rozmazal tvář, můj klient chce nahradit každou tvář emodži. Emoji musí odrážet emoce té tváře.

K poskytování této služby musím:

  1. Povolit mému klientovi odesílání obrázků
  2. Detekujte tváře v každém obrázku
  3. Určete emoce každé tváře
  4. Nahraďte každou tvář emodži
  5. Uložte upravený obrázek

Místo toho, abych to všechno postavil sám, budu na AWS používat architekturu bez serveru.

Architektury bez serverů

K vývoji tohoto systému potřebuji tři služby.

  • Amazon S3: škálovatelné ukládání souborů na základě škálovatelných objektů
  • AWS Lambda: výpočet bez serverů
  • Amazon Rekognition: analýza obrazu

S využitím těchto služeb jsem vyvinul následující architekturu.

Architektura bez serveru

Vraťme se k definici architektury bez serveru.

Systém řízený událostmi, který využívá logiku a vytrvalost využívající FaaS a další plně spravované služby.

Architektura, kterou jsem navrhl, odpovídá této definici.

  1. Když uživatel nahraje soubor, vytvoří se událost ObjectCreated a vyvolá se funkce Lambda.
  2. Funkce Lambda volá Amazon Rekognition, aby detekovala tváře a emoce každé tváře v nahraném obrázku.
  3. Funkce Lambda zpracovává obraz a přetrvává v Amazonu S3

Jednoduchost tohoto designu je to, co činí serverless přitažlivým.

Jaké jazyky a nástroje mohu použít

Pokud chcete tento systém postavit sami, musíte vytvořit infrastrukturu a kód.

K vývoji kódu můžete použít Node.js, Python, Java nebo C #. Pro každý z těchto jazyků existuje sada AWS SDK. Pokud váš jazyk chybí, sledujte jazykovou podporu, která poroste v roce 2017.

Chcete-li vytvořit infrastrukturu, existuje několik možností. První možností je použití konzoly AWS. Je to dobrý způsob, jak začít, když se učíte. To se však nedoporučuje pro produkční služby. Druhou možností je rozvíjet vaši infrastrukturu jako kód. Dva dobré nástroje pro tento účel jsou CloudFormation nebo Terraform.

Pro zjednodušení vám doporučujeme použít nástroj, který vám pomůže s nasazením vaší infrastruktury a kódu. Serverless Framework je nástroj, který doporučuji používat. Je to open source projekt s velkou komunitou přispěvatelů (včetně mě). Mezi další alternativy patří Apex, Claudia, Sparta a další.

Ukaž kód

Viděli jste architekturu, podívejme se na nějaký kód. Budu používat Serverless Framework a NodeJs.

Prvním krokem je definování infrastruktury pomocí Serverless Framework. Za tímto účelem jsem vytvořil novou službu.

serverless create --template aws-nodejs - cesta emotikonu-facewap

Infrastruktura

Tím se vytvoří složka obsahující konfigurační soubor s názvem serverless.yml. Zde jsou definovány funkce a infrastruktura pro moji službu.

Tato konfigurace vytváří funkci Lambda mého obličeje a kbelíku S3. Funkce Lambda bude vyvolána, když je objekt vytvořen ve složce uploads / folder.

Kód

Každá funkce Lambda má popisovač, který slouží jako vstupní bod. Nastavil jsem popisovač pro mou Lambda funkci na src / faceswap.handler v serverless.yml. Toto je kombinace cesty k souboru src / faceswap.js a funkce, kterou lze vyvolat v tomto obslužném programu souborů.

Každá obslužná funkce má tři parametry:

module.exports.handler = (událost, kontext, zpětné volání) => {
   ...
   
   // Použít zpětné volání () a vrátit informace volajícímu.
}
  • Událost: Data týkající se události. V tomto případě bude obsahovat informace o souboru, který byl vytvořen v S3
  • Kontext: Lambda runtime informace
  • Zpětné volání: Běžné zpětné volání uzlů, které můžete použít k vrácení chyby nebo výsledku.

Pro můj projekt musí funkce Lambda splnit tři úkoly.

  1. Získávání obrázků z události S3
  2. Volejte Rekognition API
  3. Zpracování obrázků a uložení výsledků.

Můžete zobrazit kód, který volá Amazon Rekognition, a zpracovat obrázky na GitHubu.

Posledním krokem je nasazení projektu a jeho otestování. K nasazení projektu jsem spustil následující příkaz.

sls deploy --stage your_stage_name

Poté jsem nahrál obrázky z Pexels do S3 a zkontroloval výsledky.

Fotografie od Pexels

Byl to opravdu zábavný projekt. Vytvoření projektu projektu, jako je tento, je nejlepším způsobem, jak se učit. Pomůže vám pochopit architektury řízené událostmi a jak vytvářet systémy bez serveru.

Kde se mohu dozvědět více?

K dispozici je spousta skvělých zdrojů, abyste se dozvěděli více o Serverless.

  • Blogy: Zóna bez serveru, Framework bez serveru, Blog Guru Cloud Guru
  • Knihy: Bezserverové architektury na AWS, AWS Lambda v akci
  • Diskuze: Fórum bez serveru, Reddit
  • Videa: Prezentace ServerlessConf, Serverless Framework
  • Konference: Austin ServerlessConf
  • Slack: serverless-forum
  • Meetup Groups: Podívejte se na tento seznam nebo hledejte meetup.com
  • Zdroje: Úžasné prostředky bez serverů, bez serverů

Doufám, že vás příspěvek inspiroval k pohledu na Serverless. Existuje mnoho skvělých případů použití vyzkoušet. HTTP API, Chatbot nebo Alexa Skill jsou jen některé projekty, které můžete vyzkoušet.

Pokud máte nějaké dotazy k tomuto projektu nebo obecně bez serveru, můžete mě kontaktovat na médiu nebo Twitteru. Pokud se mnou chcete osobně setkat, budu provozovat workshop v ServerlessConf Austin.

Hacker Poledne je to, jak hackeři začínají odpoledne. Jsme součástí rodiny @AMI. Nyní přijímáme příspěvky a rádi diskutujeme o reklamních a sponzorských příležitostech.
Pokud jste si tento příběh užili, doporučujeme si přečíst naše nejnovější technické příběhy a trendy technologických příběhů. Až příště nepřijímejte realitu světa jako samozřejmost!