Continuous integration serverless aplikace založené na AWS Lambda — 1.část — popis systému a hlavní výzvy

Adam Šenk
Feb 20, 2018 · 3 min read

Continuous integration je systém nástrojů a postupů, které umožňují týmu programátorů pracovat na jednom kódu, sjednocovat a verzovat provedené změny, a tyto změny, (ideálně) automaticky a co nejčastěji, nasazovat na různá prostředí (test, dev, prod apod.)

Nejznámnějšími a nepoužívanějšími nástroji jsou různé webové repozitáře jako GitHub, GitLab nebo BitBucket a buildovací servery jako například Jenkins nebo Travis CI.

V MessageOk před námi stála výzva, připravit continuous integration našeho backendu, který je postaven na integraci několik AWS služeb. Pro ilustraci mohu uvést, že používáme Api Gateway, Lambdy, S3, dynamoDB a další. Zvolená architektura přináší řadu výhod (jako je decoupling jednotlivých služeb, vysoká dostupnost, rychlejší vývoj busines logiky, nižší cena za cloudový hosting atd.) avšak při zavádění automatické integrace změn a deploymentu jsme narazili na řadu problémů. Tipům a trikům, jak tyto problémy překonat, věnuji několik blogpostů.

Popis architektury backendu

Předtím, než se začnu věnovat samotným změnám, které bylo nutno provést, nastíním architekturu systému, aby bylo jasné, jaké všechny AWS služby používáme.

  • API Gateway: služba jež umožňuje definovat webové rozhraní vaší aplikace a navázat na jednotlivé endpointy sadu akcí. V našem případě se nejčastěji pouští definovaná lambda funkce
  • Lambda: umožňuje programovat bloky kódu, aniž byste se museli starat o nasazení na server. Samotné spuštění funkce a vykonání funkce je čište v režii AWS. Podporované jazyky jsou Python, Node.js, Java nebo .Net a nově i Go.
  • S3: je cloudové úložiště, jež umožňuje ukládat soubory do vysoce dostupného webového file systému.
  • Dynamo DB: distribuovaná dokumentová cloudová NoSQL databáze
  • SNS: je zkratkou pro Simple Notification Service. Tato služba umožňuje ostatním AWS službám možnost vystavovat oznámení nebo nad těmito oznámeními poslouchat.
  • SQS: služba s názvem Simple Queue Service umožňuje zasílání zpráv mezi jednotlivými microservices čímž usnadňuje vývoj distribuovaných aplikací
  • ElasticBeanStalk: souží ke snadnému nasazování a správě webových aplikací. V našem případě je používán jako consumer a zpracovatel zpráv zaslaných pomocí SQS

Základní problémy pří zavádění Continuous Integration

Protože náš backend integruje velké množství služeb, bylo nutné vyřešit především tři základní problémy:

  • Infrastructure as a code: Amazon nabízí webovou consoli, jejíž bohaté UI umožňuje provádět nastavení a integraci jednotlivých AWS služeb. Provádět nastavení a změny pomocí UI je sice na počátku snadné a výhodné, protože vám to umožní rychle nastartovat váš projekt, z dlouhodobého hlediska přináší několik problémů. Jednak změny nastavení musíte provádět na mnoha místech. Za druhé je těžké se ve všech nastaveních orientovat. A v neposlední řadě, taková nastavení nemůžete verzovat, takže je těžké se vrátit do nějakého určitého stavu. Proto jsme se rozhodli využít možnosti AWS a mít celou infrastrukturu nadefinovanou v jednom YAMLu. O tomto se však do detailu rozepíši v dalších dílech.
  • Verzování zdrojových a infrastrukturních kódů: je problém, na který se zaměřím hned v následujícím blogu. Na backendu v dřívějších dobách nepracovalo více vývojářů, proto nebylo zcela nutné verzování kódu řešit ( i proto, že na některé AWS služby mají správu verzí integrovanou — např.: AWS Lambda). Ve chvíli, kdy se backendový tým rozrostl, nezbýval než začít používat některý z verzovacích systémů, v našem případě git.
  • Automatické deployování nových verzí : Všechny změny, které se objeví v gitu se automaticky nasazují ve třech prostředích — DEV, TEST a PROD. Nastavení automatického deploymentu se také budu věnovat až v dalších částech toho blogu.

Zvolené řešení

Rozhodli jsme se celou naši infrastrukturu, včetně její definice verzovat pomocí gitu. Vybrali jsme si GitLab, poskytovatele free webové git repozitáře. Všechny změny jsou automaticky propagovány do prostředí AWS, které se stará o buildy a nasazení.

Jak to bylo s tím gitem

roč používáme git mimo AWS, k čemu se hodí merge requesty, jak jsme řešili automatické nasazování do různých prostředí, to jsou jen některé témata, kterým se budu věnovat v některých dalších dílech. V těch přímo následujících se však zaměřím na to jak s gitem pracujeme a jak GitLab integrujeme s AWS.

Předem díky, za jakoukoliv zpětnou vazbu…

Druhý díl je zde!

MessageOk.com / devblog

Zajímavosti a zprávy ze zákulisí messageok

Adam Šenk

Written by

Father, node.js programmer, Database specialist, AWS user, Leftist, Feminist, Green Party (Czech Republic) member, Traveler, Sailor and Husband

MessageOk.com / devblog

Zajímavosti a zprávy ze zákulisí messageok

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade