Latviešu

Apgūstiet infrastruktūru kā kodu ar šo visaptverošo Terraform ceļvedi. Uzziniet pamatkoncepcijas, paraugpraksi un uzlabotus darbplūsmas globāla mēroga mākoņa un lokālās infrastruktūras pārvaldībai.

Infrastruktūra kā kods: Visaptverošs Terraform ceļvedis globālām komandām

Mūsdienu straujajā digitālajā vidē organizāciju spēja nodrošināt vērtību ir kritiska konkurences priekšrocība. Tradicionāli IT infrastruktūras pārvaldība — serveru nodrošināšana, tīklu konfigurēšana, datu bāzu iestatīšana — bija manuāls, laikietilpīgs un kļūdām pakļauts process. Šī manuālā pieeja radīja šķēršļus, noveda pie neatbilstībām starp vidēm un padarīja mērogošanu par būtisku izaicinājumu. Šīs modernās problēmas risinājums ir paradigmas maiņa domāšanā: izturieties pret savu infrastruktūru ar tādu pašu stingrību un disciplīnu kā pret savu lietojumprogrammu kodu. Tas ir infrastruktūras kā koda (IaC) pamatprincips.

Starp spēcīgajiem rīkiem, kas ir parādījušies, lai aizstāvētu šo paradigmu, HashiCorp Terraform izceļas kā globāls līderis. Tas ļauj komandām droši un efektīvi definēt, nodrošināt un pārvaldīt infrastruktūru jebkurā mākonī vai pakalpojumā. Šis ceļvedis ir paredzēts globālai izstrādātāju, operāciju inženieru un IT vadītāju auditorijai, kuri vēlas saprast un ieviest Terraform. Mēs izpētīsim tā pamatkoncepcijas, iziesim cauri praktiskiem piemēriem un detalizēti aprakstīsim paraugpraksi, kas nepieciešama, lai to veiksmīgi izmantotu sadarbības, starptautiskā komandas vidē.

Kas ir infrastruktūra kā kods (IaC)?

Infrastruktūra kā kods ir IT infrastruktūras pārvaldības un nodrošināšanas prakse, izmantojot mašīnu lasāmus definīciju failus, nevis izmantojot fiziskās aparatūras konfigurāciju vai interaktīvus konfigurācijas rīkus. Tā vietā, lai manuāli noklikšķinātu mākoņa pakalpojumu sniedzēja tīmekļa konsolē, lai izveidotu virtuālo mašīnu, jūs rakstāt kodu, kas definē šīs mašīnas vēlamo stāvokli. Šo kodu pēc tam izmanto IaC rīks, piemēram, Terraform, lai reālu infrastruktūru saskaņotu ar jūsu definīciju.

IaC pieņemšanas priekšrocības ir transformējošas:

IaC rīki parasti ievēro vienu no diviem paņēmieniem: imperatīvu vai deklaratīvu. Imperatīvs paņēmiens (''kā'') ietver skriptu rakstīšanu, kas norāda precīzus soļus, lai sasniegtu vēlamo stāvokli. Deklaratīvs paņēmiens (''kas''), ko izmanto Terraform, ietver vēlamā infrastruktūras gala stāvokļa definēšanu, un pats rīks noskaidro visefektīvāko veidu, kā to sasniegt.

Kāpēc izvēlēties Terraform?

Lai gan ir pieejami vairāki IaC rīki, Terraform ir ieguvis milzīgu popularitāti dažu galveno iemeslu dēļ, kas padara to īpaši piemērotu daudzveidīgām, globālām organizācijām.

Sniedzēja agnostiska arhitektūra

Terraform nav piesaistīts vienam mākoņa nodrošinātājam. Tā izmanto uz spraudņiem balstītu arhitektūru ar ''sniedzējiem'', lai mijiedarbotos ar plašu platformu klāstu. Tas ietver lielākos publiskos mākoņus, piemēram, Amazon Web Services (AWS), Microsoft Azure un Google Cloud Platform (GCP), kā arī lokālos risinājumus, piemēram, VMware vSphere, un pat platformu kā pakalpojumu (PaaS) un programmatūru kā pakalpojumu (SaaS) sniedzējus, piemēram, Cloudflare, Datadog vai GitHub. Šī elastība ir nenovērtējama organizācijām ar vairāku mākoņu vai hibrīda mākoņa stratēģijām, ļaujot tām izmantot vienu rīku un darbplūsmu, lai pārvaldītu visu savu infrastruktūras pēdu.

Deklaratīva konfigurācija ar HCL

Terraform izmanto savu domēnam specifisko valodu, ko sauc par HashiCorp Configuration Language (HCL). HCL ir paredzēts lasīšanai un rakstīšanai cilvēkiem, līdzsvarojot ekspresivitāti, kas nepieciešama sarežģītai infrastruktūrai, ar maigu mācīšanās līkni. Tā deklaratīvais raksturs nozīmē, ka jūs aprakstāt, kādu infrastruktūru vēlaties, un Terraform nodarbojas ar loģiku, to izveidot, atjaunināt vai izdzēst.

Stāvokļa pārvaldība un plānošana

Šī ir viena no Terraform visspēcīgākajām funkcijām. Terraform izveido stāvokļa failu (parasti ar nosaukumu terraform.tfstate), kas darbojas kā karte starp jūsu konfigurāciju un reālajiem resursiem, kurus tas pārvalda. Pirms jebkādu izmaiņu veikšanas Terraform palaiž komandu plan. Tā salīdzina jūsu vēlamo stāvokli (jūsu kodu) ar pašreizējo stāvokli (stāvokļa failu) un ģenerē izpildes plānu. Šis plāns parāda tieši to, ko Terraform darīs — kuri resursi tiks izveidoti, atjaunināti vai iznīcināti. Šī ''priekšskatījums pirms lietošanas'' darbplūsma nodrošina būtisku drošības tīklu, novēršot nejaušas izmaiņas un sniedzot jums pilnīgu pārliecību par jūsu izvietojumiem.

Plaukstoša atvērtā pirmkoda ekosistēma

Terraform ir atvērtā pirmkoda projekts ar lielu un aktīvu globālo kopienu. Tas ir novedis pie tūkstošiem sniedzēju izveides un publiska Terraform reģistra, kas ir piepildīts ar atkārtoti izmantojamiem moduļiem. Moduļi ir iepriekš iepakoti Terraform konfigurāciju komplekti, kurus var izmantot kā jūsu infrastruktūras celtniecības blokus. Tā vietā, lai rakstītu kodu no nulles, lai iestatītu standarta virtuālo privāto mākoni (VPC), jūs varat izmantot labi pārbaudītu, kopienas atbalstītu moduli, ietaupot laiku un ieviešot labāko praksi.

Sākot darbu ar Terraform: soli pa solim

Pāriesim no teorijas pie prakses. Šī sadaļa palīdzēs jums instalēt Terraform un izveidot savu pirmo mākoņa infrastruktūras daļu.

Priekšnosacījumi

Pirms sākat, jums būs nepieciešams:

Instalēšana

Terraform tiek izplatīts kā viens binārais fails. Vieglais veids, kā to instalēt, ir apmeklēt oficiālo Terraform lejupielādes lapu un ievērot norādījumus savai operētājsistēmai. Pēc instalēšanas varat to pārbaudīt, atverot jaunu termināļa sesiju un palaižot: terraform --version.

Jūsu pirmā Terraform konfigurācija: AWS S3 spaiņs

Mēs sāksim ar vienkāršu, bet praktisku piemēru: AWS S3 spaiņa izveidi, kas ir izplatīts mākoņa krātuves resurss. Izveidojiet jaunu direktoriju savam projektam un tajā izveidojiet failu ar nosaukumu main.tf.

Pievienojiet šo kodu savam failam main.tf. Ņemiet vērā, ka jums jāaizstāj "my-unique-terraform-guide-bucket-12345" ar globāli unikālu savas S3 spaiņa nosaukumu.

Fails: 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" } }

Sadalīsim to, ko šis kods dara:

Galvenā Terraform darbplūsma

Tagad, kad jums ir konfigurācijas fails, pārejiet uz sava projekta direktoriju savā terminālī un veiciet šīs darbības.

1. terraform init

Šī komanda inicializē jūsu darba direktoriju. Tā lasa jūsu konfigurāciju, lejupielādē nepieciešamos sniedzēju spraudņus (šajā gadījumā `aws` sniedzēju) un iestata fona daļu stāvokļa pārvaldībai. Jums šī komanda jāpalaiž tikai vienu reizi vienam projektam vai vienmēr, kad pievienojat jaunu pakalpojumu sniedzēju.

$ terraform init

2. terraform plan

Šī komanda izveido izpildes plānu. Terraform nosaka, kādas darbības ir nepieciešamas, lai sasniegtu jūsu kodā definēto stāvokli. Tā parādīs jums kopsavilkumu par to, kas tiks pievienots, mainīts vai iznīcināts. Tā kā šī ir mūsu pirmā reize, tā ierosinās izveidot vienu jaunu resursu.

$ terraform plan

Rūpīgi pārskatiet izvadi. Šī ir jūsu drošības pārbaude.

3. terraform apply

Šī komanda piemēro plānā aprakstītās izmaiņas. Tas jums vēlreiz parādīs plānu un lūgs jūsu apstiprinājumu pirms turpināšanas. Ierakstiet `yes` un nospiediet taustiņu Enter.

$ terraform apply

Terraform tagad sazināsies ar AWS API un izveidos S3 spaini. Kad tas ir izdarīts, varat pieteikties savā AWS konsolē, lai redzētu savu jaunizveidoto resursu!

4. terraform destroy

Kad esat pabeidzis ar resursiem, varat tos viegli sakopt. Šī komanda parāda visu, kas tiks iznīcināts, un, tāpat kā `apply`, lūdz apstiprinājumu.

$ terraform destroy

Šis vienkāršais `init -> plan -> apply` cikls ir pamatdarbplūsma, ko izmantosit visiem saviem Terraform projektiem.

Terraform labākā prakse globālajām komandām

Pāreja no viena faila jūsu klēpjdatorā uz ražošanas infrastruktūras pārvaldību izplatītai komandai prasa strukturētāku pieeju. Labākās prakses ievērošana ir ļoti svarīga mērogojamībai, drošībai un sadarbībai.

Savus projektus strukturēt ar moduļiem

Augot jūsu infrastruktūrai, viss viena failā main.tf kļūst nepārvaldāms. Risinājums ir izmantot moduļus. Terraform modulis ir pašsaturīgs konfigurāciju pakete, kas tiek pārvaldīta kā grupa. Domājiet par tiem kā funkcijām programmēšanas valodā; tie ņem ievadus, izveido resursus un nodrošina izvades.

Sadalot savu infrastruktūru loģiskos komponentos (piemēram, tīkla modulis, tīmekļa servera modulis, datu bāzes modulis), jūs iegūstat:

Parastā projekta struktūra var izskatīties šādi:

/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

Stāvokļa apgūšana: attālie bekgendi un bloķēšana

Pēc noklusējuma Terraform saglabā savu stāvokļa failu (terraform.tfstate) jūsu vietējā projekta direktorijā. Tas ir labi solo darbam, bet tas ir liela problēma komandām:

Risinājums ir izmantot attālinātu bekgendu. Tas norāda Terraform, lai saglabātu stāvokļa failu koplietotā, attālinātā atrašanās vietā. Populāri bekgendi ir AWS S3, Azure Blob Storage un Google Cloud Storage. Spēcīga attālā bekgenda konfigurācija ietver arī stāvokļa bloķēšanu, kas neļauj vairāk nekā vienai personai vienlaikus palaist lietojumprogrammas darbību.

Šeit ir piemērs attālā bekgenda konfigurēšanai, izmantojot AWS S3 krātuvei un DynamoDB bloķēšanai. Tas iekļūtu jūsu terraform blokā main.tf:

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 } }

Piezīme. Jums iepriekš ir jāizveido S3 spaiņs un DynamoDB tabula.

Konfigurācijas nodrošināšana: slepeno datu pārvaldība

Nekad, nekad neiekodējiet sensitīvus datus, piemēram, paroles, API atslēgas vai sertifikātus, tieši savos Terraform failos. Šie faili ir paredzēti, lai tos pārbaudītu versiju kontroles sistēmā, kas atklātu jūsu slepeno informāciju ikvienam, kam ir piekļuve krātuvei.

Tā vietā izmantojiet drošu metodi, lai ievadītu slepeno informāciju izpildlaikā:

Dinamiskās konfigurācijas: ievades mainīgie un izvades vērtības

Lai jūsu konfigurācijas būtu atkārtoti izmantojamas un elastīgas, izvairieties no vērtību iekodēšanas. Izmantojiet ievades mainīgos, lai parametrizētu savu kodu. Definējiet tos failā variables.tf:

Fails: variables.tf

variable "environment_name" { description = "Vides nosaukums (piemēram, sagatavošana, ražošana)." type = string } variable "instance_count" { description = "Izvietojamo tīmekļa servera instanču skaits." type = number default = 1 }

Pēc tam varat atsaukties uz šiem mainīgajiem citos failos, izmantojot `var.variable_name`.

Līdzīgi izmantojiet izvades vērtības, lai atklātu noderīgu informāciju par izveidotajiem resursiem. Tas ir īpaši svarīgi moduļiem. Definējiet tos failā outputs.tf:

Fails: outputs.tf

output "web_server_public_ip" { description = "Primārā tīmekļa servera publiskā IP adrese." value = aws_instance.web.public_ip }

Šīs izvades var viegli pieprasīt no komandrindas vai izmantot kā ievades citām Terraform konfigurācijām.

Sadarbība un pārvaldība ar versiju kontroli

Jūsu infrastruktūras kods ir kritisks aktīvs un pret to jāizturas kā pret tādu. Viss Terraform kods ir jāglabā versiju kontroles sistēmā, piemēram, Git. Tas nodrošina:

Vienmēr iekļaujiet failu .gitignore savā projektā, lai neļautu iesniegt sensitīvus failus, piemēram, lokālos stāvokļa failus, avārijas žurnālus vai pakalpojumu sniedzēju spraudņus.

Uzlabotas Terraform koncepcijas

Kad esat iepazinies ar pamatiem, varat izpētīt uzlabotākas funkcijas, lai uzlabotu savas darbplūsmas.

Vides pārvaldība ar darba vietām

Terraform darba vietas ļauj pārvaldīt vairākus atšķirīgus stāvokļa failus vienai un tai pašai konfigurācijai. Šis ir izplatīts veids, kā pārvaldīt dažādas vides, piemēram, `dev`, `staging` un `production`, nedublējot savu kodu. Varat pārslēgties starp tiem, izmantojot `terraform workspace select `, un izveidot jaunus, izmantojot `terraform workspace new `.

Funkcionalitātes paplašināšana ar nodrošinātājiem (brīdinājums)

Nodrošinātāji tiek izmantoti skriptu izpildei lokālajā vai attālajā mašīnā kā resursu izveides vai iznīcināšanas daļa. Piemēram, varat izmantot nodrošinātāju `remote-exec`, lai palaistu konfigurācijas skriptu virtuālajā mašīnā pēc tā izveides. Tomēr oficiālā Terraform dokumentācija iesaka nodrošinātājus izmantot kā pēdējo līdzekli. Parasti ir labāk izmantot specializētus konfigurācijas pārvaldības rīkus, piemēram, Ansible, Chef vai Puppet, vai izveidot pielāgotus mašīnu attēlus, izmantojot tādu rīku kā Packer.

Terraform Cloud un Terraform Enterprise

Lielākām organizācijām HashiCorp piedāvā Terraform Cloud (pārvaldītu pakalpojumu) un Terraform Enterprise (pašuzņemošu versiju). Šīs platformas balstās uz atvērtā pirmkoda versiju, nodrošinot centralizētu vidi komandas sadarbībai, pārvaldībai un politikas ieviešanai. Tie piedāvā tādas funkcijas kā privāts moduļu reģistrs, politika kā kods ar Sentinel un dziļa integrācija ar versiju kontroles sistēmām, lai izveidotu pilnu CI/CD kanālu jūsu infrastruktūrai.

Secinājums: Infrastruktūras nākotnes pieņemšana

Infrastruktūra kā kods vairs nav nišas prakse elitārām tehnoloģiju kompānijām; tā ir mūsdienu DevOps pamat elements un nepieciešamība jebkurai organizācijai, kas vēlas darboties ātri, uzticami un mērogojami mākonī. Terraform nodrošina spēcīgu, elastīgu un platformai neatkarīgu rīku, lai efektīvi ieviestu šo paradigmu.

Definējot savu infrastruktūru kodā, jūs atverat automatizācijas, konsekvences un sadarbības pasauli. Jūs nododat pilnvaras savām komandām, neatkarīgi no tā, vai tās atrodas vienā birojā vai izplatītas visā pasaulē, strādāt kopā nevainojami. Jūs samazināt risku, optimizējat izmaksas un galu galā paātrināt savu spēju nodrošināt vērtību saviem klientiem.

Ceļojums IaC var šķist biedējošs, bet atslēga ir sākt ar mazumiņu. Paņemiet vienkāršu, nekritisku savas infrastruktūras komponentu, definējiet to Terraform un praktizējiet darbplūsmu `plan` un `apply`. Iegūstot pārliecību, pakāpeniski paplašiniet Terraform izmantošanu, pieņemiet šeit aprakstīto labāko praksi un integrējiet to savas komandas pamatprocesos. Ieguldījums, ko veicat Terraform apguvē un ieviešanā šodien, nesīs ievērojamas dividendes jūsu organizācijas veiklībā un noturībā rīt.