Nädal 9 — Infrastruktuur koodina: mõtteviis (ASYNC)
Iseseisev nädal
Seekord serverit vaja pole — puhas mõtteharjutus. Töötad iseseisvalt, esitad GitHubi enne järgmist sessiooni. Eelmine nädal sulgus CI/CD ring (image GHCR-i). Nüüd valmistume Terraformiks — deklaratiivne vs imperatiivne. Järgmine sessioon: Terraform, esimene kontakt (90 min).
Taust — miks see nädal on tähtis?
Kursuse jooksul oled kasutanud mitmeid tööriistu. Igaüks lahendab erineva probleemi, aga neil on midagi ühist: nad kõik kirjeldavad kuidagi seda, mis peab olema.
Nädal 10 tutvud Terraformiga — tööriistaga, mis haldab infrastruktuuri (servereid, võrke, salvestust) koodina. Et Terraform'ist aru saada, pead esmalt mõistma, mis vahe on deklaratiivsel ja imperatiivsel lähenemisel.
Lugemismaterjal (loe enne ülesannet)
Deklaratiivne vs imperatiivne — meenutus loengu materjalist
Imperatiivne — kirjeldad sammud (kuidas teha):
mkdir /opt/app
cd /opt/app
git clone https://github.com/example/app .
pip install -r requirements.txt
systemctl start myapp
Deklaratiivne — kirjeldad lõppseisundit (mis peab olema):
- name: rakendus on paigaldatud
hosts: servers
tasks:
- git:
repo: https://github.com/example/app
dest: /opt/app
- service:
name: myapp
state: started
Idempotentsus — meenutus
Deklaratiivsed tööriistad on üldjuhul idempotentsed — sama konfiguratsiooni saab rakendada mitu korda, tulemus on alati sama. Imperatiivne skript võib teine kord käivitades probleeme tekitada (nt kui kaust on juba olemas).
Ülesanne
Esita GitHubi oma reposes fail: docs/week09/iac_mindset.md
Loo see fail oma arvutis, täida sisu, lisa ja push GitHubi.
Osa 1 — Võrdlustabel (kohustuslik)
Täida järgmine tabel nädala 2–8 materjalide põhjal. Iga tööriist peab saama lahtri iga veeru kohta.
| Tööriist | Lähenemine (deklaratiivne / imperatiivne) | Mida haldab | Idempotentne? |
|---|---|---|---|
| Bash skript | |||
| Git | |||
| Ansible | |||
| Docker (Dockerfile) | |||
| Docker Compose | |||
| GitHub Actions | |||
| Terraform | ? | ? | ? |
Juhised:
- Lähenemine: kirjuta "deklaratiivne" või "imperatiivne" (või "mõlemat", kui see sobib)
- Mida haldab: ühe lausega, näiteks "serverite konfiguratsioon", "konteinerite käivitamine", "koodi versioonid"
- Idempotentne?: "jah", "ei", või "sõltub"
- Terraform rida: jäta tühjaks — täidad nädal 10 sessioonis, kus vaatame koos üle
Osa 2 — Ennustus (kohustuslik)
Kirjuta 3 lauset (kokku, mitte üks lause küsimuse kohta) järgmisele küsimusele:
Mida teeb Terraform teisiti kui Ansible?
Kirjuta aus ennustus — ei pea olema täiesti õige. Vaatame neid ennustusi nädal 10 sessioonis koos üle ja arutame, mis klapib, mis mitte. Vigade tegemine on lubatud.
Vihjed mõtlemiseks (ärge googelda vastust — mõelge ise): - Ansible haldab konfiguratsiooni (mis on serveris sees). Terraform haldab infrastruktuuri (serverid ise, võrgud, tulemüürid). Mis vahe see teeb? - Ansible'il ei ole "seisundit" — ta rakendab konfiguratsiooni ja unustab. Terraform mäletab, mida ta on loonud. Mida see tähendab kustutamisel?
Osa 3 — Venitusülesanne (valikuline)
Valikuline — neile, kes tahavad rohkem
Loe 12-Factor App metoodikat — täpsemalt jaotised:
- III. Config — konfiguratsiooni hoidmine keskkonnamuutujates
- IV. Backing services — teenused kui lisatavad ressursid
- V. Build, release, run — build etappide eraldamine
Lisa tabelisse viies veerg: 12-Factor nõuetele vastav?
Igasse lahtrisse: üks sõna (jah / osaliselt / ei) + üks lause selgituseks.
Näide:
| Docker Compose | deklaratiivne | mitme teenuse käitamine | jah | osaliselt —
toetab env muutujaid (Factor III), aga ei erista build/run etappe (Factor V) |
Esitamine
- Loo fail
docs/week09/iac_mindset.mdoma repos - Täida mõlemad osad (Osa 1 + Osa 2)
- Commit ja push:
git add docs/week09/iac_mindset.md
git commit -m "nädal 9: IaC mõtteviis tabel ja ennustus"
git push
Tähtaeg: enne järgmise nädala sessiooni algust.
Esita Moodles link failile GitHubis (mitte repo, vaid konkreetne fail — "Raw" vaade ei ole vajalik, lihtsalt GitHubi failivaade).
Kontrollimine
Enne esitamist veendu, et:
-
docs/week09/iac_mindset.mdon GitHubis nähtav - Tabel on täidetud (v.a Terraform rida)
- Ennustus on kirjutatud — 3 lauset
- Commit'i sõnum on mõistlik (mitte "asdfgh", "update" ega Märteni "asjad")