# Week 15: Infrastruktura kao Kod (IaC)

Postoji vise nacina na koje mozete kreirati i upravljati infrastrukturom unutar AWS. Nove resurse mozete podignuti koristeci korisnicki interfejs - AWS kozolu, komand line interfejs odnosno terminal ili koristeci Amazon Software Develpment Kit.

Ukoliko manuelno kreiarte vase resurse, vrlo brzo cete shvatiti da taj pristup i nije najbolji, klikanjem kroz konzolu moze biti naporno i podlozno je greskama. Migracijom na cloud okruzenja omoguceno nam je da infrastrukturu konfigurisemo i radimo sa njom na drugacije nacine nego sto je to bio slucaj u standardnim data centrima. Kompletna infrastruktura vase aplikacije moze biti podignuta u nekoliko sekundi, skaliranje moze biti napravljeno bez unaprijed planiranog prosirenja kpaciteta a API svakog od servisa nam omogucava da sa njima komunicirarmo koristeci programske jezike koje vec koristimo za razvoj nasih aplikacija. Kako bi se dodatno udaljili od tradicionalnog manuelnog (rucnog) pristupa odrzavanju i konfiguraciji infrastrukture u upotrebu se uvelo nesto sto nazivamo Infrastruktura kao Kod.

**Infrastructure as Code (IaC)** - je paradigma koja omogucava da se prema vasoj infrastrukturi odnosite na identican nacin kao i prema kodu bilo koje aplikacije.

Zahvaljuci takvom pristupu vasa infrastruktura moze biti pohranjena unutar version kontrol sistema (git) gdje mozete pratiti izmjene napravljene nad vasom infrastrukturom,izvrsavati testove nad njom,ali takodjer planirati te kontrolisati izmjene. Takodjer vi na ovaj nacin uvijek imate poznato zadnje dobro stanje vase infrastrukture sto vam omogucava da uradite rollback izmjena ukoliko je doslo do problema. Neki od trenutno najpopularnijih alata za IaC su:

* Amazon CloudFormation
* Terrafrom
* Plumi
* Amazon CDK

### CloudFormation

* **CloudFormation Template**
  * predstavlja dokument napisan u JSON-u ili YAML-u
  * definise LOGICKE resurse - ono STA kreiramo
  * koristi se za kreiranje ***Stack***-ova
* **CloudFormation Stack**
  * koriste se za kreiranje FIZICKIH resursa iz logickih koji su definisani u ***template***-u
  * svaka izmjena nad logickih resursima unutar ***template*** fajla, nakon ***update***-a ***Stack***-a bice izvrsena nad fizickim resursima
  * brisanjem ***Stack***-a obrisati ce se i svi fizicki resursi
* **Parametri**
  * **Template Parametri** prihvataju ***input***, ulazne podatke koji su uneseni putem Console/CLI/API. Koriste se za kreiranje ili ***update*** ***Stack***-a.
  * **Pseudo Parametri** - upravljane od strane AWS i zavise od okruzenja u kojem se kreira ***Stack***
* **AWS CloudFormation ChangeSet** - omogucava pregled izmjena nad resursima prije izvrsavanja nad ***Stack***-om
* **Drift detection** - detekcija svih izmjena koje su izvrsene manuelno nad resursima koji su kreirani iz ***Stack***-a.

### Terrafrom<br>

### Snimci predavanja

#### DevOps Mentorship Program - Week 15 - Alma Kazija - IaC CloudFormation ([#tier](https://www.youtube.com/hashtag/tier)-1-group-1)

{% embed url="<https://youtu.be/h8sN4-6w9e8>" %}

#### DevOps Mentorship Program - Week 15 - Dragan Pavlovic - IaC Terrafrom ([#tier](https://www.youtube.com/hashtag/tier)-1-group-2)

{% embed url="<https://youtu.be/eJOhtwGnmIY>" %}

### Materijali za ucenje

### Korisni alati

### Zadatak

### Materijali za dodatno citanje
