Infrastruktura jako kód (OpenTofu)
Síť, VM, zálohy i alarmy popsané v souborech infra/*.tf – vzniknou příkazem tofu apply.
Na této stránce
V jedné větě: Místo klikání v konzoli je celá cloudová infrastruktura popsaná v OpenTofu ve složce
infra/; příkaztofu applyporovná popis se skutečností a dorovná rozdíly.
Přirovnání: Ruční nastavení je vaření „od oka“. Infrastruktura jako kód je recept – podle něj uvaří stejné jídlo kdokoli a kolikrát chce. A když se jídlo spálí (VM zmizí), uvaří se znovu.
Soubory
| Soubor | Co popisuje |
|---|---|
| versions.tf | verze OpenTofu a providera oracle/oci, kde leží state |
| variables.tf | vstupy (OCID compartmentu, velikost VM, e-mail pro alarmy…) |
| network.tf | VCN, internet gateway, route table, security list, subnet |
| compute.tf | VM, cloud-init, reserved IP |
| cloud-init.yaml.tftpl, bootstrap.sh.tftpl | příprava nové VM při prvním startu |
| backup.tf | bucket záloh, lifecycle 7 dní, politika pro VM |
| monitoring.tf | alarmy VM a e-mailová notifikace |
| outputs.tf | co vypsat po apply (IP, OCID…) |
| terraform.tfvars.example, backend.hcl.example | vzory skutečných vstupů (ty nejsou v gitu) |
Jak se používá
cd infra
tofu init "-backend-config=backend.hcl" # jednou (v PowerShellu v uvozovkách)
tofu plan # co by se změnilo
tofu apply # provede to
Spouští se na PC správce pod technickým uživatelem minishop-automation (smí jen do compartmentu minishop).
flowchart LR
tf["infra/*.tf<br/>popis"] --> plan["tofu plan<br/>rozdíl"]
state[("State v OCI bucketu<br/>minishop-tfstate")] --> plan
real["Skutečnost v OCI"] --> plan
plan --> apply["tofu apply"]
apply --> real
apply --> state
Důležitá rozhodnutí
| Rozhodnutí | Proč |
|---|---|
| OpenTofu, ne Terraform | open-source fork Terraformu (licence MPL), stejný jazyk i provider |
| State v OCI Object Storage (S3 API) | state není v gitu (obsahuje citlivé údaje), přežije ztrátu PC, je verzovaný |
VM má ignore_changes na obraz a metadata |
nový obraz Ubuntu ani změna cloud-init nesmí sama smazat a vytvořit VM (ztráta dat) |
Novou VM jen vědomě: tofu apply -replace=oci_core_instance.vm |
změna cloud-init nebo deploy.sh se na VM dostane jen tak |
Reserved IP a bucket záloh mají prevent_destroy |
ani tofu destroy je omylem nesmaže |
Dynamická skupina minishop-vm se zakládá ručně |
je na úrovni tenancy, kam minishop-automation nesmí |
Bash v šablonách jen $var, ne ${var} |
${…} je syntaxe OpenTofu – nahradil by ji svou hodnotou |
Nová VM (např. po havárii)
- Nový Tailscale auth key do
terraform.tfvars,tofu apply -replace=oci_core_instance.vm. - V Tailscale adminu vrátit VM adresu
100.126.167.103, aktualizovatDEPLOY_KNOWN_HOSTSv GitHubu. - GitHub → Actions → Deploy → Run workflow se SHA commitu.
- Data:
sudo -u deploy /opt/minishop/restore.sh latest(Zálohy).
Vyzkoušeno cvičnou havárií: VM smazaná → tofu apply → Deploy → obnova → objednávky zpět.