Lietuvių

Į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ė:

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:

Į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:

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:

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:

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:

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:

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 ` ir kurti naujas naudodami `terraform workspace new `.

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.