Juhend: Õpime tundma Terraformi Pilvio näitel ja seame üles Nginx veebiserveri
Sissejuhatus
Pilveteenused ja nende haldamine on tänapäeva IT-maailma lahutamatu osa. Eestis on mitmeid platvorme, mis pakuvad virtuaalserverite haldamist, kuid sageli puudub neil võimalus taristut hallata kaasaegsete, API-põhiste tööriistadega nagu Terraform. See piirab DevOps-praktikate rakendamist ja automatiseerimist.
Pilvio on Eestis esimene pilveteenusepakkuja, mis on ehitatud API-esmalt põhimõttel, võimaldades sul hallata ressursse (virtuaalvõrgud, serverid jms) sarnaselt suurtele globaalsetele pilveplatvormidele nagu AWS või Google Cloud. Tänu sellele API-le saab Pilvio peale ehitada tarkvarakihte, mis võimaldavad kasutada levinud DevOps tööriistu, sealhulgas Terraformi.
Selles juhendis näitame, kuidas Terraformi abil Pilvio platvormil lihtne Nginx veebiserver püsti panna. See on suurepärane esimene samm Terraformi ja Pilvio võimaluste tundmaõppimiseks. Kõik Pilvio kasutajad saavad alustamiseks ka tasuta krediiti, millega seda ja teisi juhendeid proovida.
Miks Terraform?
Terraform on HashiCorpi loodud avatud lähtekoodiga tööriist, mis võimaldab sul defineerida ja provisioneerida taristut koodina (Infrastructure as Code - IaC). Selle asemel, et käsitsi klikkida veebiliidestes või kirjutada keerukaid skripte, kirjeldad sa oma soovitud taristu deklaratiivsetes konfiguratsioonifailides.
Terraformi peamised eelised:
- Taristu koodina (IaC): Kogu sinu serverite, võrkude, salvestusruumi jms konfiguratsioon on kirjas failides. Neid faile saab versioonihallata (nt Gitiga), jagada ja korduvalt kasutada.
- Täitmise plaanid (Execution Plans): Enne muudatuste tegemist genereerib Terraform plaani, mis näitab täpselt, milliseid ressursse luuakse, muudetakse või kustutatakse. See annab sulle täieliku kontrolli ja aitab vältida ootamatusi.
- Ressursside graaf (Resource Graph): Terraform ehitab sinu ressurssidest sõltuvuste graafi ja haldab neid paralleelselt ning efektiivselt.
- Muutuste automatiseerimine: Korduvad ülesanded, nagu testkeskkondade loomine või rakenduste skaleerimine, muutuvad lihtsaks ja kiireks.
- Olekuhaldus (State Management): Terraform hoiab alles sinu hallatava taristu hetkeseisu. See võimaldab Terraformil teada, millised reaalsed ressursid vastavad sinu konfiguratsioonile ja kuidas neid uuendada. Kui keegi kustutab käsitsi Terraformiga loodud serveri, püüab Terraform selle vastavalt olemasolevale konfiguratsioonile ja seisundifailile taastada.
Erinevalt lihtsatest skriptidest, mis võivad olla ettearvamatud ja mille puhul on raske jälgida taristu tegelikku seisu, pakub Terraform robustset ja usaldusväärset viisi pilveressursside haldamiseks.
Eeldused
See juhend on loodud olema võimalikult lihtne ja sobib hästi ka algajatele, kes Terraformiga alles tutvust teevad. Enne alustamist veendu, et sul on olemas järgmised asjad:
- Pilvio kasutajakonto: Kui sul veel kontot pole, saad selle luua aadressil https://pilvio.com/.
- Pilvio API võti: Logi sisse oma Pilvio kontole. Vasakul menüüribal vali "Access" ja genereeri sealt uus API võti. Hoia see võti turvaliselt alles!
- Pilvio arvelduskonto ID (
billing_account_id): Selle leiad Pilvio portaalist, minnes menüüvalikusse "Billing", klikkides oma maksevahendile ja leides sealt "Account ID" väärtuse. - Terraform CLI paigaldatud: Kui sul Terraformi veel pole, järgi paigaldusjuhiseid Terraformi ametlikul veebilehel.
Samm 1 – Terraformi projekti algväärtustamine
Alustame Terraformi projekti ülesseadmisega. Loo oma arvutisse uus kaust projekti jaoks (nt pilvio-terraform-nginx) ja liigu käsureal sellesse kausta.
1. Loo fail variables.tf
Selles failis deklareerime muutujad, mida meie Terraformi konfiguratsioonides kasutame. Esialgu vajame muutujaid Pilvio API võtme ja arvelduskonto ID jaoks.
Loo fail nimega variables.tf järgmise sisuga:
variable "pilvio" {
type = object({
api_key = string
billing_account_id = number
})
description = "Pilvio konto andmed: API võti ja arvelduskonto ID."
sensitive = true # Märgib, et see muutuja sisaldab tundlikke andmeid
}Selgitus: Me loome siin
object-tüüpi muutuja nimegapilvio. Sellel objektil on kaks atribuuti:
api_key(tüüpstring): Sinu Pilvio API võti.billing_account_id(tüüpnumber): Sinu Pilvio arvelduskonto ID.Atribuut
sensitive = truetagab, et Terraform ei kuva selle muutuja väärtust logides ega käsurea väljundites pärast selle esmast seadistamist.Kuigi
billing_account_idpole kohe esimeses sammus (ainult API võtme edastamisel providerile) vajalik, on hea see juba siia lisada, kuna hiljem serverit luues läheb seda vaja. Muutujate grupeerimine objektikspilvioteeb koodi selgemaks – näiteks API võtmele viitame edaspidi kuivar.pilvio.api_key.
2. Loo fail init.tf
Selles failis määratleme Terraformi enda ja vajalike providerite (antud juhul Pilvio provideri) seaded.
Loo fail nimega init.tf järgmise sisuga:
terraform {
required_providers {
pilvio = {
source = "pilvio-com/pilvio"
version = "1.0.9" # Soovitatav on kasutada kindlat versiooni või vahemikku, nt ">= 1.0.9"
}
}
}
provider "pilvio" {
host = "api.pilvio.com" # Pilvio API endpoint
apikey = var.pilvio.api_key
location = "tll01" # Vaikimisi asukoht, saab hiljem muuta või muutujana defineerida
}Selgitus:
terraform { ... }plokk:
required_providers: Siin määrame, et meie projekt vajab Pilvio providerit.sourceütleb Terraformile, kust see provider leida (Terraform Registry'st) javersionmäärab kasutatava versiooni.provider "pilvio" { ... }plokk:
- See konfigureerib Pilvio provideri.
host: Pilvio API serveri aadress.apikey: Sinu Pilvio API võti. Viitame siin eelmises failis defineeritud muutujalevar.pilvio.api_key.location: Vaikimisi asukoht Pilvios, kus ressursse luuakse (nttll01Tallinna jaoks). Seda saab hiljem ka ressursipõhiselt üle kirjutada või teha eraldi muutujaks.
3. Algväärtusta Terraformi projekt
Nüüd, kui esimesed konfiguratsioonifailid on olemas, ava terminal oma projekti kaustas ja käivita järgmine käsk:
terraform initSee käsklus teeb järgmist:
- Laeb alla ja paigaldab Pilvio provideri, mis on defineeritud
init.tffailis. - Seadistab backendi (kui see on defineeritud, meie näites praegu mitte).
- Kontrollib konfiguratsioonifailide süntaksit.
Kui kõik õnnestus, peaksid nägema teadet: Terraform has been successfully initialized!
Samm 2 – Veebiserveri loomine
Nüüd, kui projekt on algväärtustatud, saame hakata defineerima ressursse, mida soovime Pilvios luua. Meie eesmärk on luua virtuaalmasin ja paigaldada sinna Nginx veebiserver.
1. Täienda faili variables.tf
Lisame variables.tf faili uue muutuja virtuaalmasina (VM) kasutajanime ja parooli jaoks.
Ava variables.tf ja lisa olemasoleva pilvio muutuja järele järgmine kood:
variable "vm" {
type = object({
username = string
password = string
})
description = "Virtuaalmasina sisselogimisandmed (kasutajanimi ja parool)."
sensitive = true
}Selgitus: See
vmobjekt sisaldab:
username(tüüpstring): Kasutajanimi VM-i sisselogimiseks.password(tüüpstring): Parool VM-i sisselogimiseks. Ka siin onsensitive = trueoluline, et parooli ei kuvataks ebaturvaliselt.
2. Loo fail server.tf
Selles failis defineerime Pilvio ressursid: virtuaalmasina, ujuva (avaliku) IP-aadressi ja selle IP-aadressi sidumise virtuaalmasinaga.
Loo fail nimega server.tf järgmise sisuga:
resource "pilvio_vm" "web_server" {
name = "nginx-web-server-tf" # VM-i nimi Pilvios
os_name = "ubuntu" # Operatsioonisüsteem
os_version = "22.04" # OS versioon
memory = 512 # RAM MB-des (väike testserver)
vcpu = 1 # vCPU-de arv
username = var.vm.username # Kasutajanimi variables.tf failist
password = var.vm.password # Parool variables.tf failist
disks = 20 # Ketta suurus GB-des
# billing_account_id puudub siit, kuna see on provideri tasemel juba määratud,
# aga kui on mitu arvelduskontot, saab siin spetsiifilise määrata.
# location on samuti provideri tasemel, aga saab siin üle kirjutada.
# cloud-init konfiguratsioon Nginx'i paigaldamiseks
cloud_init = jsonencode({
packages = [
"nginx" # Paigaldatav pakett
],
runcmd = [
"systemctl enable nginx", # Veendu, et Nginx käivituks automaatselt
"systemctl start nginx" # Käivita Nginx kohe pärast paigaldust
]
})
}
resource "pilvio_floatingip" "web_public_ip" {
name = "nginx-public-ip-tf"
billing_account_id = var.pilvio.billing_account_id # Vajalik Floating IP loomiseks
# location on provideri tasemel, aga saab siin üle kirjutada, kui vaja.
}
resource "pilvio_floatingip_assignment" "web_server_ip_assignment" {
# Sõltuvused tagavad, et VM ja IP on enne sidumist loodud
depends_on = [
pilvio_vm.web_server,
pilvio_floatingip.web_public_ip
]
assigned_to = pilvio_vm.web_server.uuid # Loodud VM-i UUID
address = pilvio_floatingip.web_public_ip.address # Loodud Floating IP aadress
# location on provideri tasemel.
}Selgitus:
resource "pilvio_vm" "web_server": See plokk defineerib virtuaalmasina.
- Määrame nime, OS-i, mälu, vCPU-d, kasutajanime, parooli ja kettasuuruse.
cloud_init: See on võtmetähtsusega osa.cloud-initon standardne tööriist pilveserverite esmaseks konfigureerimiseks. Siin kasutame seda, et:
packages = ["nginx"]: Paigaldada Nginx veebiserveri tarkvara.runcmd: Käivitada käsud pärast pakettide paigaldamist, et Nginx teenus lubada (automaatseks käivitumiseks) ja kohe käivitada.jsonencode(): Terraformi funktsioon, mis konverteerib HCL-sarnase struktuuri korrektseks JSON-iks, midacloud-initootab.resource "pilvio_floatingip" "web_public_ip": See loob ujuva (avaliku) IP-aadressi. Selleks on vajabilling_account_id-d.resource "pilvio_floatingip_assignment" "web_server_ip_assignment": See seob loodud ujuva IP-aadressi loodud virtuaalmasinaga.
assigned_to = pilvio_vm.web_server.uuid: Viitab loodava VM-i unikaalsele ID-le (UUID).address = pilvio_floatingip.web_public_ip.address: Viitab loodava ujuva IP-aadressile.- Terraform mõistab neid viiteid ja loob ressursid õiges järjekorras (esmalt VM ja IP, seejärel sidumine).
depends_onon siin lisatud selguse mõttes, kuigi Terraform suudaks sõltuvused ka automaatselt tuvastada.
3. Loo fail outputs.tf
Väljundid (outputs) on kasulikud, et Terraform kuvaks pärast ressursside loomist teatud informatsiooni, näiteks loodud serveri avaliku IP-aadressi.
Loo fail nimega outputs.tf järgmise sisuga:
output "web_server_public_ip" {
value = "http://${pilvio_floatingip.web_public_ip.address}"
description = "Nginx veebiserveri avalik IP-aadress (koos http:// prefiksiga)."
# sensitive = false # Vaikimisi false, võib soovi korral lisada
}Selgitus:
output "web_server_public_ip": Defineerib väljundi nimegaweb_server_public_ip.value: Määrab väljundi väärtuse. Siin konstrueerime URL-i, kasutades loodud ujuva IP-aadressi (pilvio_floatingip.web_public_ip.address). Terraformi interpolatsioonisüntaks${...}võimaldab viidata teiste ressursside atribuutidele.
4. Loo fail terraform.tfvars ja väärtusta muutujad
Nagu eelnevalt mainitud, on terraform.tfvars fail koht, kuhu paned oma konkreetsed väärtused, eriti tundlikud andmed. Terraform loeb selle faili sisu automaatselt.
Loo fail nimega terraform.tfvars (kui sa seda juba Samm 1-s ei teinud või soovid täiendada) järgmise sisuga:
pilvio = {
api_key = "SINU_PILVIO_API_VÕTI_SIIA" # ASENDA PÄRIS VÕTMEGA
billing_account_id = 12345 # ASENDA OMA ARVELDUSKONTO ID-GA
}
vm = {
username = "nginxuser" # VÕID VALIDA OMALE SOBIVA KASUTAJANIME
password = "GENEREERI_VÄGA_TUGEV_PAROOL_SIIA" # ASENDA PÄRIS PAROOLIGA
}⚠️ Hoiatus: Asenda kindlasti ülaltoodud näidisväärtused (
SINU_PILVIO_API_VÕTI_SIIAjne) oma tegelike andmetega. Ära lisa seda faili versioonihaldusesse (nt Git), kui see sisaldab sinu API võtit ja paroole! Lisaterraform.tfvarsoma.gitignorefaili. Parool peab tõenäoliselt vastama Pilvio nõuetele (nt sisaldama suur- ja väiketähti, numbreid, sümboleid ning olema piisava pikkusega). Kui parool ei vasta nõuetele, võib VM-i loomine ebaõnnestuda.
Samm 3 – Ressursside tööle panemine
Nüüd, kui kõik konfiguratsioonifailid on paigas ja terraform.tfvars on sinu andmetega täidetud, saame infrastruktuuri Pilvios luua.
Kontrolli konfiguratsiooni ja vaata plaani: Enne muudatuste rakendamist on alati hea mõte vaadata, mida Terraform täpselt teha kavatseb. Käivita käsk:
terraform planTerraform analüüsib sinu konfiguratsioonifaile ja kuvab nimekirja ressurssidest, mida ta kavatseb luua, muuta või kustutada. Kui kõik tundub korrektne, võid edasi liikuda.
✨ Nõuanne: Võid plaani ka faili salvestada (
terraform plan -out=myplan) ja hiljem selle sama plaani rakendada (terraform apply myplan). See tagab, et rakendatakse täpselt seda, mida planeeriti, isegi kui vahepeal on konfiguratsioonifaile muudetud.Rakenda muudatused (loo ressursid): Ressursside reaalseks loomiseks käivita:
terraform applyTerraform kuvab uuesti plaani ja küsib sinult kinnitust (
Do you want to perform these actions?). Sisestayesja vajuta Enter.Terraform hakkab nüüd Pilvios sinu defineeritud ressursse looma. See võib võtta mõned minutid. Jälgi käsurea väljundit.
Kontrolli väljundit: Kui
terraform applyon edukalt lõpule jõudnud, peaks Terraform kuvamaoutputs.tffailis defineeritud väljundid. Meie näites peaks see olemaweb_server_public_ip. Näiteks:Outputs: web_server_public_ip = "[http://123.45.67.89](http://123.45.67.89)"Pane see IP-aadress kirja.
✨ Nõuanne: Pärast
terraform applykäsu edukat lõppu võib kuluda veel mõni hetk (tavaliselt kuni minut), kunicloud-initskript VM-is lõpetab Nginx'i paigaldamise ja käivitamise.Testi veebiserverit: Ava veebibrauser ja sisesta aadressiribale Terraformi poolt antud
web_server_public_ip(nthttp://123.45.67.89). Sa peaksid nägema Nginx'i vaikimisi tervituslehte ("Welcome to nginx!").Kui näed Nginx'i lehte, siis palju õnne – oled edukalt Terraformiga Pilvios veebiserveri püsti pannud!
Samm 4 – Ressursside maha võtmine
Kui oled katsetamise lõpetanud ja soovid loodud ressursid eemaldada, et vältida tarbetuid kulusid, on see Terraformiga väga lihtne.
Käivita oma projekti kaustas järgmine käsk:
terraform destroyTerraform kuvab nimekirja ressurssidest, mida ta kavatseb kustutada, ja küsib sinult kinnitust. Sisesta yes ja vajuta Enter.
Terraform kustutab kõik selle projektiga loodud ressursid Pilviost (VM, Floating IP ja selle sidumine).
Kokkuvõte
Selles juhendis õppisid sa tundma Terraformi põhitõdesid Pilvio pilveplatvormi näitel. Sa seadsid üles Terraformi projekti, defineerisid lihtsa veebiserveri infrastruktuuri koodina ja lasid Terraformil selle automaatselt Pilviosse paigaldada. Samuti õppisid, kuidas loodud ressursse hiljem eemaldada.
See on alles algus! Terraform pakub palju võimsamaid võimalusi keerukate taristute haldamiseks, moodulite loomiseks ja olemasoleva taristu importimiseks. Pilvio API-põhine platvorm koos Terraformiga avab uksed kaasaegsetele DevOps-praktikatele ja taristu automatiseerimisele Eestis.
Järgmiste sammudena võid proovida:
- Lisada Terraformi konfiguratsiooni keerukamaid võrguseadeid (nt Pilvio VPC).
- Automatiseerida rakenduse enda paigaldust
cloud-initvõi Ansible'i abil. - Uurida Terraformi mooduleid, et luua korduvkasutatavaid taristukomponente.
Kui sul tekib küsimusi Pilvio teenuste või Terraformi provideri kohta, võta julgelt ühendust Pilvio klienditoega või uuri lähemalt Pilvio dokumentatsioonist.