Įvaldykite infrastruktūrą kaip kodą su šiuo išsamiu „Terraform“ vadovu. Mokykitės pagrindinių sąvokų, geriausios praktikos ir pažangių darbo eigų debesų bei vidinės infrastruktūros valdymui pasauliniu mastu.
Infrastruktūra kaip kodas: Išsamus „Terraform“ vadovas pasaulinėms komandoms
Šiandieninėje sparčiai besikeičiančioje skaitmeninėje aplinkoje organizacijos gebėjimas greitai teikti vertę yra svarbus konkurencinis pranašumas. Tradiciškai IT infrastruktūros – serverių priskyrimas, tinklų konfigūravimas, duomenų bazių nustatymas – valdymas buvo rankinis, daug laiko reikalaujantis ir klaidų taisymui imlus procesas. Šis rankinis metodas sukūrė kliūtis, lėmė aplinkų neatitikimus ir padarė mastelio didinimą dideliu iššūkiu. Sprendimas šiai moderniai problemai yra mąstymo paradigmų pasikeitimas: su savo infrastruktūra elkitės taip pat griežtai ir disciplinuotai, kaip su programos kodu. Tai yra „Infrastruktūra kaip kodas“ (IaC) pagrindinis principas.
Tarp galingų įrankių, kurie atsirado šiai paradigmai paremti, „HashiCorp“ „Terraform“ išsiskiria kaip pasaulinis lyderis. Jis leidžia komandoms saugiai ir efektyviai apibrėžti, priskirti ir valdyti infrastruktūrą bet kuriame debesyje ar paslaugoje. Šis vadovas skirtas pasaulinei kūrėjų, operacijų inžinierių ir IT vadovų auditorijai, norinčiai suprasti ir įgyvendinti „Terraform“. Mes išnagrinėsime jo pagrindines sąvokas, praktinius pavyzdžius ir aprašysime geriausią praktiką, reikalingą sėkmingai jį panaudoti bendradarbiaujančioje, tarptautinėje komandos aplinkoje.
Kas yra „Infrastruktūra kaip kodas“ (IaC)?
„Infrastruktūra kaip kodas“ yra IT infrastruktūros valdymo ir priskyrimo per mašinoje skaitomus apibrėžimo failus, o ne per fizinės aparatūros konfigūraciją ar interaktyvios konfigūracijos įrankius praktika. Vietoj to, kad rankiniu būdu spaudytumėte debesų paslaugų teikėjo žiniatinklio konsolę, kad sukurtumėte virtualią mašiną, parašote kodą, kuris apibrėžia norimą tos mašinos būklę. Tada šis kodas naudojamas IaC įrankio, pavyzdžiui, „Terraform“, kad realaus pasaulio infrastruktūra atitiktų jūsų apibrėžimą.
IaC priėmimo nauda yra transformacinė:
- Greitis ir lankstumas: Automatizavus infrastruktūros priskyrimą žymiai sutrumpėja laikas, reikalingas naujoms aplinkoms diegti kūrimui, testavimui ar gamybai. Tai, kas anksčiau užtruko dienas ar savaites, dabar gali būti atlikta per minutes.
- Nuoseklumas ir idempotentumas: Rankiniai procesai yra jautrūs žmogiškoms klaidoms, todėl atsiranda konfigūracijos dreifas, kai aplinkos, kurios turėtų būti identiškos, lėtai skiriasi. IaC užtikrina, kad kiekvienas diegimas būtų nuoseklus ir pakartojamas. Operacija yra „idempotentė“, jei ją vykdant kelis kartus gaunamas tas pats rezultatas, užkertant kelią dublikatų ištekliams ar neteisingoms konfigūracijoms.
- Versijos valdymas ir bendradarbiavimas: Išsaugant infrastruktūros apibrėžimus versijų valdymo sistemoje, pvz., „Git“, jūs gaunate visą kiekvieno pakeitimo auditavimo taką. Komandos gali bendradarbiauti dėl infrastruktūros naudodamosi pažįstamomis darbo eigomis, tokiomis kaip prašymai pertraukti ir kodo peržiūros, gerinant kokybę ir atskaitingumą.
- Kaštų optimizavimas: IaC leidžia lengvai kurti ir naikinti laikinas aplinkas pagal poreikį. Galite paleisti visapusišką testavimo aplinką kelias valandas, o tada ją išjungti, mokėdami tik už tai, ką naudojate, o tai yra didelė bet kurios organizacijos kaštų taupymo priemonė.
- Rizikos mažinimas: Diegimo automatizavimas sumažina žmogiškosios klaidos riziką. Be to, galimybė peržiūrėti ir išbandyti infrastruktūros pakeitimus prieš juos taikant gamybos aplinkoms žymiai sumažina galimybę sukelti trikdį.
IaC įrankiai paprastai naudoja vieną iš dviejų metodų: imperatyvų arba deklaratyvų. Imperatyvus metodas („kaip“) apima scenarijų rašymą, nurodant tikslius veiksmus norimai būklei pasiekti. Deklaratyvus metodas („kas“), kurį naudoja „Terraform“, apima norimos galutinės infrastruktūros būklės apibrėžimą, o pats įrankis nustato efektyviausią būdą ją pasiekti.
Kodėl verta rinktis „Terraform“?
Nors yra keletas IaC įrankių, „Terraform“ įgijo didžiulį populiarumą dėl kelių svarbių priežasčių, kurios daro jį ypač tinkamu įvairioms, pasaulinėms organizacijoms.
Tiekėjo nepriklausoma architektūra
„Terraform“ nėra susietas su vienu debesų paslaugų teikėju. Jis naudoja papildomų modulių architektūrą su „teikėjais“ (providers), kad sąveikautų su daugybe platformų. Tai apima pagrindinius viešuosius debesis, tokius kaip „Amazon Web Services“ (AWS), „Microsoft Azure“ ir „Google Cloud Platform“ (GCP), taip pat vidines sprendimus, tokius kaip „VMware vSphere“, ir netgi platforma-kaip-paslauga (PaaS) ir programinė įranga-kaip-paslauga (SaaS) teikėjus, tokius kaip „Cloudflare“, „Datadog“ ar „GitHub“. Šis lankstumas yra neįkainojamas organizacijoms, turinčioms daugiasluoksnes ar hibridines debesų strategijas, leidžiant joms naudoti vieną įrankį ir darbo eigą, kad valdytų visą savo infrastruktūros pėdsaką.
Deklaratyvi konfigūracija su HCL
„Terraform“ naudoja savo specifinę kalbą, vadinamą „HashiCorp Configuration Language“ (HCL). HCL yra sukurta taip, kad būtų lengvai skaitoma žmonių ir lengva rašyti, subalansuojant sudėtingai infrastruktūrai reikalingą išraiškingumą su švelniu mokymosi kreivė. Jos deklaratyvus pobūdis reiškia, kad apibrėžiate, kokios infrastruktūros norite, o „Terraform“ tvarko logiką, kaip ją sukurti, atnaujinti ar ištrinti.
Būklės valdymas ir planavimas
Tai viena galingiausių „Terraform“ funkcijų. „Terraform“ sukuria būklės failą (paprastai pavadintą terraform.tfstate
), kuris veikia kaip žemėlapis tarp jūsų konfigūracijos ir realaus pasaulio išteklių, kuriuos jis valdo. Prieš atlikdamas bet kokius pakeitimus, „Terraform“ vykdo plan
komandą. Jis palygina jūsų norimą būklę (jūsų kodą) su dabartine būkle (būklės failas) ir sukuria vykdymo planą. Šis planas parodo tiksliai, ką „Terraform“ darys – kurie ištekliai bus sukurti, atnaujinti ar sunaikinti. Ši „peržiūrėti prieš taikant“ darbo eiga suteikia kritinį saugos tinklelį, užkertant kelią atsitiktiniams pakeitimams ir suteikiant jums visą pasitikėjimą savo diegimuose.
Klesti atvirojo kodo ekosistema
„Terraform“ yra atvirojo kodo projektas su didelės ir aktyvios pasaulinės bendruomenės. Tai paskatino tūkstančių teikėjų ir viešojo „Terraform“ registro su daugkartinio naudojimo moduliais sukūrimą. Moduliai yra supakuoti „Terraform“ konfigūracijų rinkiniai, kuriuos galima naudoti kaip infrastruktūros statybinius blokus. Užuot rašę kodą nuo nulio, kad sukurtumėte standartinį virtualų privatų tinklą (VPC), galite naudoti gerai patikrintą, bendruomenės palaikomą modulį, taupydami laiką ir užtikrindami geriausią praktiką.
Pradedant naudoti „Terraform“: nuoseklus vadovas
Pereikime nuo teorijos prie praktikos. Ši dalis padės jums įdiegti „Terraform“ ir sukurti savo pirmąją debesų infrastruktūrą.
Reikalavimai
Prieš pradėdami, jums reikės:
- Komandinės eilutės sąsaja (Terminalas „macOS“/„Linux“, „PowerShell“ arba WSL „Windows“).
- Debesų paslaugų teikėjo paskyra. Mūsų pavyzdyje naudosime AWS, tačiau principai taikomi bet kuriam teikėjui.
- Konfigūruotas jūsų debesų paslaugų teikėjo komandinės eilutės įrankis (pvz., AWS CLI) su jūsų kredencialais. „Terraform“ naudos šiuos kredencialus autentifikavimui.
Įdiegimas
„Terraform“ platinamas kaip vienas dvejetainis failas. Lengviausias būdas jį įdiegti yra apsilankyti oficialiame „Terraform“ parsisiuntimo puslapyje ir vadovautis savo operacinės sistemos instrukcijomis. Įdiegę, galite tai patikrinti atidarę naują terminalo sesiją ir paleidę: terraform --version
.
Jūsų pirmoji „Terraform“ konfigūracija: AWS S3 kaupiklis
Pradėsime nuo paprasto, bet praktiško pavyzdžio: AWS S3 kaupiklio kūrimo, bendro debesų saugojimo ištekliaus. Sukurkite naują katalogą savo projektui ir jame – failą, pavadintą main.tf
.
Pridėkite šį kodą į savo main.tf
failą. Atkreipkite dėmesį, kad turėtumėte pakeisti „my-unique-terraform-guide-bucket-12345“
į pasaulinį unikalų jūsų S3 kaupiklio pavadinimą.
Failas: main.tf
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "us-east-1" } resource "aws_s3_bucket" "example_bucket" { bucket = "my-unique-terraform-guide-bucket-12345" tags = { Name = "My Terraform Guide Bucket" Environment = "Dev" ManagedBy = "Terraform" } }
Paaiškinkime, ką šis kodas daro:
terraform
blokas yra vieta, kur apibrėžiate pagrindinius „Terraform“ nustatymus, įskaitant reikiamus teikėjus. Čia nurodome, kad mums reikia `aws` teikėjo iš „HashiCorp“ ir kad esame suderinami su 5.x versija.provider
blokas konfigūruoja nurodytą teikėją, šiuo atveju `aws`. Mes sakome „Terraform“, kad mūsų ištekliai būtų kuriami `us-east-1` AWS regione.resource
blokas yra svarbiausias. Jis deklaruoja infrastruktūros dalį. Sintaksė yra `resource "_ " " "`. Čia `aws_s3_bucket` yra išteklių tipas, o `example_bucket` yra vietinis pavadinimas, kurį naudojame šiam ištekliui nurodyti „Terraform“ kode. Bloko viduje apibrėžiame ištekliaus argumentus, tokius kaip `bucket` pavadinimas ir aprašomieji `tags`.
Pagrindinė „Terraform“ darbo eiga
Dabar, kai turite konfigūracijos failą, terminale eikite į savo projektų katalogą ir atlikite šiuos veiksmus.
1. terraform init
Ši komanda inicializuoja jūsų darbinį katalogą. Ji skaito jūsų konfigūraciją, atsisiunčia reikiamus teikėjo papildinius (šiuo atveju `aws` teikėją) ir nustato foną būklės valdymui. Jums reikia paleisti šią komandą tik kartą projektui arba visada, kai pridedate naują teikėją.
$ terraform init
2. terraform plan
Ši komanda sukuria vykdymo planą. „Terraform“ nustato, kokių veiksmų reikia norimai būklei, apibrėžtai jūsų kode, pasiekti. Ji parodys jums santrauką, kas bus pridėta, pakeista ar sunaikinta. Kadangi tai mūsų pirmasis paleidimas, ji pasiūlys sukurti vieną naują išteklių.
$ terraform plan
Atidžiai peržiūrėkite išvestį. Tai jūsų saugos patikrinimas.
3. terraform apply
Ši komanda taiko plane aprašytus pakeitimus. Ji dar kartą parodys planą ir paprašys jūsų patvirtinimo prieš tęsiant. Įveskite `yes` ir paspauskite Enter.
$ terraform apply
Dabar „Terraform“ susisieks su AWS API ir sukurs S3 kaupiklį. Kai baigsis, galėsite prisijungti prie savo AWS konsolės, kad pamatytumėte savo naujai sukurtą išteklių!
4. terraform destroy
Baigę dirbti su ištekliais, galite juos lengvai sutvarkyti. Ši komanda parodo viską, kas bus sunaikinta, ir, kaip ir `apply`, prašo patvirtinimo.
$ terraform destroy
Šis paprastas `init -> plan -> apply` ciklas yra pagrindinė darbo eiga, kurią naudosite visuose savo „Terraform“ projektuose.
„Terraform“ geriausios praktikos pasaulinėms komandoms
Perėjimas nuo vieno failo jūsų nešiojamajame kompiuteryje prie gamybos infrastruktūros valdymo paskirstytose komandose reikalauja labiau struktūrizuoto požiūrio. Geriausių praktikų laikymasis yra kritiškas mastui, saugumui ir bendradarbiavimui.
Projektų struktūrizavimas su moduliais
Kai jūsų infrastruktūra plečiasi, visko perkėlimas į vieną main.tf
failą tampa nevaldomas. Sprendimas yra naudoti modulius. „Terraform“ modulis yra savarankiška konfigūracijų pakuotė, valdoma kaip grupė. Galvokite apie juos kaip apie funkcijas programavimo kalboje; jie priima įvestis, sukuria išteklius ir pateikia išvestis.
Padalijus savo infrastruktūrą į loginius komponentus (pvz., tinklo modulį, žiniatinklio serverio modulį, duomenų bazės modulį), jūs gaunate:
- Daugkartinis naudojimas: Naudokite tą patį modulį nuoseklios infrastruktūros diegimui skirtingose aplinkose (dev, staging, production).
- Priežiūra: Pakeitimai yra izoliuoti konkrečiame modulyje, todėl kodu lengviau suprasti ir valdyti.
- Organizavimas: Gerai struktūrizuotas projektas su moduliais yra daug lengviau naršomas naujiems komandos nariams.
Dažna projekto struktūra gali atrodyti taip:
/environments /staging main.tf variables.tf outputs.tf /production main.tf variables.tf outputs.tf /modules /vpc main.tf variables.tf outputs.tf /web-server main.tf variables.tf outputs.tf
Valdant būklę: nuotoliniai fonai ir užrakinimas
Pagal numatytuosius nustatymus „Terraform“ saugo savo būklės failą (terraform.tfstate
) jūsų vietiniame projektų kataloge. Tai tinka solo darbui, tačiau yra didelė problema komandoms:
- Jei vienas komandos narys pritaiko pakeitimą, kito nario būklės failas tampa neaktualus.
- Nėra apsaugos nuo dviejų žmonių, vienu metu vykdančių `terraform apply`, todėl būklės failas ir jūsų infrastruktūra gali būti sugadinti.
- Būklės failo saugojimas vietoje yra saugumo rizika, nes jame gali būti konfidencialios informacijos.
Sprendimas yra naudoti nuotolinį foną. Tai nurodo „Terraform“ saugoti būklės failą bendrai, nuotolinėje vietoje. Populiariausi fonai apima AWS S3, Azure Blob Storage ir Google Cloud Storage. Tvirta nuotolinio foninio konfigūracija taip pat apima būklės užrakinimą, kuris neleidžia daugiau nei vienam asmeniui vienu metu atlikti taikymo operacijos.
Štai pavyzdys, kaip konfigūruoti nuotolinį foną, naudojant AWS S3 saugojimui, o DynamoDB – užrakinimui. Tai turėtų būti jūsų `main.tf` faile esančiame `terraform` bloke:
terraform { backend "s3" { bucket = "my-terraform-state-storage-bucket" key = "global/s3/terraform.tfstate" region = "us-east-1" dynamodb_table = "my-terraform-state-lock-table" encrypt = true } }
Pastaba: Pirmiausia turite sukurti S3 kaupiklį ir DynamoDB lentelę.
Saugant jūsų konfigūraciją: valdant slaptažodžius
Niekada, niekada nekoduokite konfidencialių duomenų, tokių kaip slaptažodžiai, API raktai ar sertifikatai, tiesiai jūsų „Terraform“ failuose. Šie failai skirti įtraukti į versijų valdymą, o tai atskleistų jūsų slaptažodžius visiems, turintiems prieigą prie saugyklos.
Vietoj to, naudokite saugų metodą slaptažodžiams perduoti vykdymo metu:
- „HashiCorp Vault“: Specialiai slaptažodžių valdymui sukurtas įrankis, kuris glaudžiai integruojamas su „Terraform“.
- Debesų gimtoji slaptažodžių tvarkyklė: Naudokite paslaugas, tokias kaip AWS Secrets Manager, Azure Key Vault ar Google Secret Manager. Jūsų „Terraform“ kodui gali būti suteiktas leidimas skaityti slaptažodžius iš šių paslaugų.
- Aplinkos kintamieji: Kaip paprastesnis metodas, slaptažodžius galite perduoti kaip aplinkos kintamuosius. Daugelis „Terraform“ teikėjų automatiškai ieškos kredencialų standartiniuose aplinkos kintamuosiuose (pvz., `TF_VAR_api_key`).
Dinamiškos konfigūracijos: įvesties kintamieji ir išvesties vertės
Kad jūsų konfigūracijos būtų daugkartinio naudojimo ir lanksčios, venkite kodavimo vertybių. Naudokite įvesties kintamuosius, kad suasmenintumėte savo kodą. Apibrėžkite juos `variables.tf` faile:
Failas: variables.tf
variable "environment_name" { description = "Aplinkos pavadinimas (pvz., staging, production)." type = string } variable "instance_count" { description = "Žiniatinklio serverio instancijų skaičius, kurį reikia įdiegti." type = number default = 1 }
Tada galite nurodyti šiuos kintamuosius savo kituose failuose naudodami `var.kintamojo_pavadinimas`.
Panašiai, naudokite išvesties vertes, kad atskleistumėte naudingą informaciją apie sukurtus išteklius. Tai ypač svarbu moduliams. Apibrėžkite jas `outputs.tf` faile:
Failas: outputs.tf
output "web_server_public_ip" { description = "Pagrindinio žiniatinklio serverio viešasis IP adresas." value = aws_instance.web.public_ip }
Šias išvestis galima lengvai užklausti iš komandinės eilutės arba naudoti kaip įvestis kitiems „Terraform“ konfigūracijoms.
Bendradarbiavimas ir valdymas naudojant versijų valdymą
Jūsų infrastruktūros kodas yra kritinis turtas ir turėtų būti traktuojamas kaip toks. Visas „Terraform“ kodas turėtų būti saugomas versijų valdymo sistemoje, pvz., „Git“. Tai leidžia:
- Kodo peržiūros: Naudokite „Pull Requests“ (arba „Merge Requests“), kad kolegos peržiūrėtų infrastruktūros pakeitimus prieš juos pritaikant. Tai galinga priemonė klaidoms nustatyti, standartams taikyti ir žinioms dalintis.
- Auditavimo takai: `git blame` ir `git log` pateikia pilną istoriją, kas, kada ir kodėl pakeitė.
- Šakojimo strategijos: Naudokite šakas, kad dirbtumėte su naujomis funkcijomis ar klaidų pataisymais atskirai, nedarant įtakos gamybos infrastruktūrai.
Visada įtraukite .gitignore
failą į savo projektą, kad išvengtumėte konfidencialių failų, tokių kaip vietiniai būklės failai, avarijų žurnalai ar teikėjų papildiniai.
Pažangios „Terraform“ sąvokos
Kai būsite susipažinę su pagrindais, galite tyrinėti pažangesnes funkcijas, kad pagerintumėte savo darbo eigas.
Aplinkų valdymas naudojant darbo sritis
„Terraform“ darbo sritys leidžia valdyti kelis skirtingus būklės failus tos pačios konfigūracijos atžvilgiu. Tai įprastas būdas valdyti skirtingas aplinkas, tokias kaip `dev`, `staging` ir `production`, nedubliuojant kodo. Galite perjungti tarp jų naudodami `terraform workspace select
Funkcionalumo plėtimas naudojant teikėjus (įspėjimas)
Teikėjai naudojami vykdyti scenarijus vietinėje ar nuotolinėje mašinoje kaip dalis išteklių kūrimo ar naikinimo. Pavyzdžiui, galite naudoti `remote-exec` teikėją, kad paleistumėte konfigūracijos scenarijų virtualioje mašinoje po jos sukūrimo. Tačiau oficiali „Terraform“ dokumentacija pataria naudoti teikėjus kaip paskutinę išeitį. Paprastai geriau naudoti specializuotus konfigūracijos valdymo įrankius, tokius kaip „Ansible“, „Chef“ ar „Puppet“, arba kurti pasirinktinius mašinų vaizdus naudojant įrankius, tokius kaip „Packer“.
„Terraform Cloud“ ir „Terraform Enterprise“
Didesnėms organizacijoms „HashiCorp“ siūlo „Terraform Cloud“ (valdomą paslaugą) ir „Terraform Enterprise“ (savaime hostinamą versiją). Šios platformos remiasi atvirojo kodo versija, teikdamos centralizuotą aplinką komandos bendradarbiavimui, valdymui ir politikos vykdymui. Jos siūlo funkcijas, tokias kaip privatus modulių registras, politika kaip kodas su „Sentinel“ ir gilus integravimas su versijų valdymo sistemomis, kad sukurtų pilną CI/CD infrastruktūros vamzdyną.
Išvada: Naujosios infrastruktūros ateities priėmimas
„Infrastruktūra kaip kodas“ nebėra nišinė praktika elito technologijų įmonėms; tai yra modernios „DevOps“ pamatinis elementas ir būtinybė bet kuriai organizacijai, siekiančiai veikti greitai, patikimai ir mastu debesyje. „Terraform“ teikia galingą, lankstų ir platformai nepriklausomą įrankį, kad šią paradigmą efektyviai įgyvendintų.
Apibrėždami savo infrastruktūrą kode, jūs atidarote automatizavimo, nuoseklumo ir bendradarbiavimo pasaulį. Jūs suteikiate galių savo komandoms, nesvarbu, ar jos yra tame pačiame biure, ar pasklidusios visame pasaulyje, kad jos galėtų sklandžiai dirbti kartu. Jūs mažinate riziką, optimizuojate kaštus ir galiausiai pagreitinate savo gebėjimą teikti vertę savo klientams.
Kelionė į IaC gali atrodyti bauginanti, tačiau svarbiausia yra pradėti nuo mažo. Paimkite paprastą, ne kritinį savo infrastruktūros komponentą, apibrėžkite jį „Terraform“ ir praktikuokite `plan` ir `apply` darbo eigą. Įgydami pasitikėjimą, palaipsniui plėskite „Terraform“ naudojimą, priimkite čia apibūdintas geriausias praktikas ir integruokite jį į savo komandos pagrindinius procesus. Investicija, kurią šiandien padarysite mokydamiesi ir įgyvendindami „Terraform“, rytoj duos didelę grąžą jūsų organizacijos lankstumui ir atsparumui.