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.

Image for post
Image for post

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.

Image for post
Image for post
  • 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

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.

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

Proč 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

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store