Continuous integration serverless aplikace založené na AWS Lambda — 3.část — integrace GitLabu a AWS

Adam Šenk
Feb 20, 2018 · 3 min read

V tomto díle se budu věnovat tomu, jak propojit GitLab účet s Amazon AWS tak, aby při definované akci (v našem případě merge) byl automaticky zahájen proces nasazení změn do běhového prostředí.

Předchozí díl je zde.

AWS služba pro stahování zdrojových kódů na S3

K buildování a nasazování jednotlivých microservices, ze kterých se skládá náš backend používáme AWS CodePipeline. Nastavení této Amazoní služby se budu věnovat později. Co je ovšem podstatné, CodePipeline umí zahájit automaticky celý proces integrace a to ve chvíli kdy jej připojíme na AWS CodeCommit (Amazoní Git server) nebo AWS S3 (distribuované úložiště). My se budeme věnovat připojení na S3 neboť díky němu můžeme CodePipelane integrovat s GitLabem.

CodePipeline lze nastavit tak, aby integrace byla automaticky spuštěna ve chvíli, kdy dojde ke změně souborů umístěných na definovaném místě v S3. Proto je nutno dostat soubory z GitLabu na AWS S3.

Amazon byl tak laskavý a připravil nám celou infrastrukturu, která zdrojové kódy z GitLabu stáhne a na S3 nahraje. Postup popíšu v následujících odstavcích, pokud by někoho zajímal kompletní popis a návod se nachází na tomto odkaze: https://aws.amazon.com/quickstart/architecture/git-to-s3-using-webhooks/.

Celá infrastruktura obsahuje dvě hlavní lambda funkce (a dvě pomocné) a dva s3 buckety:

  • Key Bucket — slouží k uložení šifrovanému SSH klíčů pro přístup do GitLabu
  • Artifact Bucket — slouží k uložení stažených zdrojových kódů
  • GitPull Lambda — funkce jež dostane zdrojové kódy do S3 pomocí pullu
  • GitZipDl Lambda — funkce stahující zdrojové kódy ve formě zipu

Celou infrastrukturu můžeme nasadit na tomto odkaze: https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=Git-to-Amazon-S3&templateURL=https://s3.amazonaws.com/quickstart-reference/git2s3/latest/templates/git2s3.template

Nasazení této infrastruktury se skládá ze tří kroků

  • V prvním kroku jsme vyzvání k zadání hromady údajů. Nám ovšem stačí zadat Git Personal Access Token. Ten nalezneme v Gitlabu v našem osobním nastavení — Setting > Access Token. Musíme vytvořit nový. Vyplníme pouze jméno tokenu (Expires At necháme nevyplněné) a potvrdíme.
Image for post
  • V druhém kroku nic nevyplňujeme klikneme na Next
  • V posledním kroku musíme pouze zaškrtnou ve spodní části, že souhlasíme s vytvořením IAM rolí — I acknowledge that AWS CloudFormation might create IAM resources.

Nastavení GitLab webhooku

Po tom co je vytvořena infrastruktura musíme najít URL na kterou budeme směřovat naše webhooky.

Integraci musíme nastavit pro každý projekt. Je nutné zadat webhook, který se bude volat, pokud dojde v GitLabu k nějaké akci. Tento webhook spustí AWS Lambdu, která stáhne zdrojové kódy a uloží je na S3.

Nastavení webhooku pro daný projekt najdeme v najdeme v Settings > Integration. Zadáme získanou URL a zaškrtneme Merge request event. Náš webhhok bude spuštěn pouze v případě,že bude vytvořen/ updatován/ zamergován Merge request.

Image for post

Doladění detailů

Problém této infrastruktury je, že s GitLabem nefunguje přesně tak jak bycho si přáli. Ve chvíli, kdy je lambda nastaveným webhookem spuštěna, stáhne vždy a pouze defaultní větev (standardně master). To ovšem není to co potřebujeme.

Z příslušného webhooku zjistí, do jaké větve je mergováno. Danou větev poté stáhne a uloží do S3 do struktury GITLAB_PROJECT_OWNER/PROJECT_NAME/BRANCH. S takto staženými soubory pak mohou pracovat další služby, starající se například o build aplikací.

Pokud byste si nebyli jistí, kde upravíte danou AWS lambdu, dodávám ještě tento krátký návod. V nastavení služby AWS Lambda vyberte tu, jejíž název obsahuje ZipDlLambda. V nastavení které se vám otevře je možno upravit zdrojový kód. Nakonec změny uložte tlačítkem SAVE.

Image for post

Závěr

Tak už víte, jak integrovat GitLab a AWS. Pokud máte nějaké nejasnosti, neváhejte se na mě obrátit. Další díly, věnované jednotlivým AWS službám budou samozřejmě následovat.

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