Template Anatomy CloudFormation
Tags: cloud, bosnian, aws, learning
Published: 2023-05-28 14:49:29


Anatomy [task](https://catalog.workshops.aws/cfn101/en-US/basics/templates/template-anatomy)
Dokumentacija [template anatomy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html)

CloudFormation Template je deklaracija AWS resursa koje prave STACK. Template je spremljen kao tekstualni fajl u JSON notaciji ili YAML formatu. Obzirom da su to samo tekstualni fajlovi, mozemo ih kreirati, editovati u bilo kojem tekstualnom editoru i menadžovati ih u nasem source control sistemu sa ostatkom naseg source koda. 

AWSTemplateFormatVersion: 'version date' (optional) # version of the CloudFormation template. Only accepted value is '2010-09-09'

    Description: 'String' (opcionalno) # tekstualni opis CFormation template (u koju svrhu se koristi template)

    Metadata: 'template metadata' (opcionalno) # objekti koji pruzaju dodatne informacija o template-u

    Parameters: 'set of parameters' (opcionalno) # set ulaznih parametara (npr. naziv bucketa) koristenih za customize template-a (predloška)

    Rules: 'set pravila' (opcionalno) # a set pravila na osnovu kojih validiramo parametre koji ce biti pruzeni od strane deploymenta/update-a 

    Mappings: 'set of mappings' (opcionalno) # a mapping of keys and associated values

    Conditions: 'set of conditions' (opcionalno) # conditions that control whether certain resources are created

    Transform: 'set transformacija' (opcionalno) # za serverless app

    Resources: 'set resoursa' (OBAVEZNO) # KOMPONENTE (EC2, S3 BUCKET, SG,ALB) NASE INFRASTRUKTURE

    Hooks: 'set of hooks' (opcionalno) # Koristeni za ECS Blue/Green Deployments

    Outputs: 'set outputa' (opcionalno) # vrijednosti koje su vracene kada god zelimo da vidimo stack opcije(properties) 

Outputs znaju biti korisni u zavisnosti od toga koju vrstu template-a kreiramo i u koje svrhe.

-----
## Najbitnija opcija koju  MORAMO DA IMAMO u kreiranju template-a kako bi kreirali stack, tj. prave resurse na AWS-u je:

 **Resources: 'set resursa' (OBAVEZNO) # komponente(serveri,security grupe,iam policy itd) koji cemo koristiti na svojoj infrastrukturi**
 ----

**STACK - KONKRETNI RESURSI KREIRANI U AWS-u CLOUDU (EC2,IAM,S3..)**

 Ispod se nalazi dijagram koji prikazuje kako iz jednog napisanog JSON fajla mozemo da uradimo upload na CloudFormation (alat za infrastrukturu kao kod) i da kreiramo Stack tj. konkretne resurse automatski bez manuelnog podesavanja svakog resursa od EC2 instance do bucketa na S3 servisu. 

 Mozemo kreirati preko 100-tinu stack-ova koristeci CFormation, a stack sadrzi kolekciju AWS servisa koje mozemo da menadžujemo (upravljamo) kao jednom jedinicom. SVI RESURSI UNUTAR AWS STACK-A SU DEFINISANI TEMPLATE-om.

 **BRISANJE RESURSA - nikada ne raditi manuelno!**

 Kada zelimo da izbrisemo resurse, to radimo tako da idemo na template pa izbrisemo template-a koji zelimo, na taj nacin automatski brisemo i sve resurse koje smo kreirali kroz stack. 

 AWS CloudFormation ce da KREIRA, AZURIRA (UPDATE) I IZBRISE U POTPUNOSTI STACK: 
    
        - Ako stack ne moze da bude azuriran ili kreiran u potpunosti, onda ce AWS CLoudFormation da uradi ROLL BACK, prikaze greske i izbrise sve resurse koji su se eventualno kreirali pri pokusaju kreiranja i prije greske. 
        - Ako resurs ne moze da bude izbrisan, svi prethodni resursi se zadrzavaju dok cijeli stack ne bude uspjesno izbrisan.

 
![cf-stack-json](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9yyl9iqo1eyclqcq7e9u.png)

**Jedan od incijalni poslova Stack-a je da kreira FIZICKE RESURSE BAZIRANE NA LOGICKIM RESURSIMA KOJI SU DEFINISANI UNUTAR TEMPLATE-a.**

Za svaki logicki resurs (definisan unutar template-a), kada se Stack kreira, FIZICKI RESURS (EC2,S3 ...) je takodjer kreiran automatski (ukoliko nema template neku gresku). 

Linkovi na povezane postove za CloudFormation:

1. Jednostavni CFN template -[drugi dio](https://dev.to/justplegend/simple-cloudformation-template-4ahe)


**Dodatna dokumentacija**

 1. [AWS Dokumentacija](https://docs.aws.amazon.com/cloudformation/index.html)
 2. [Template reference](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-reference.html)
 3. [Security in AWS CFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/security.html)
 4. [Najbolje prakse u CF](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
 5. Link na resurse i kako da ih koristimo u CloudFormation: [AWS resource and property types reference](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)
 6. YouTube reInvent AWS [Deep Dive on AWS CloudFormation-2017](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)