Praktični vodič za Terraform: Ovladajte infrastrukturom kao kodom, povećajte učinkovitost i smanjite troškove
Ovaj primjer konfigurira grupu za automatsko skaliranje i povezane CloudWatch alarme za skaliranje na temelju upotrebe CPU-a.
lifecycle {
create_before_destroy = true
}
}
resource "aws_cloudwatch_metric_alarm" "cpu_high" {
alarm_name = "example-cpu-high"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 2
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = 60
statistic = "Average"
threshold = 70
alarm_description = "Alarm when server CPU exceeds 70%" # Alarm kada CPU poslužitelja prijeđe 70%
dimensions = {
AutoScalingGroupName = aws_autoscaling_group.example.name
}
alarm_actions = [aws_autoscaling_policy.scale_up.arn]
}
resource "aws_cloudwatch_metric_alarm" "cpu_low" {
alarm_name = "example-cpu-low"
comparison_operator = "LessThanThreshold"
evaluation_periods = 2
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = 60
statistic = "Average"
threshold = 30
alarm_description = "Alarm when server CPU is below 30%" # Alarm kada je CPU poslužitelja ispod 30%
dimensions = {
AutoScalingGroupName = aws_autoscaling_group.example.name
}
alarm_actions = [aws_autoscaling_policy.scale_down.arn]
}
resource "aws_autoscaling_policy" "scale_up" {
name = "example-scale-up"
scaling_adjustment = 1
adjustment_type = "ChangeInCapacity"
cooldown = 300
autoscaling_group_name = aws_autoscaling_group.example.name
}
resource "aws_autoscaling_policy" "scale_down" {
name = "example-scale-down"
scaling_adjustment = -1
adjustment_type = "ChangeInCapacity"
cooldown = 300
autoscaling_group_name = aws_autoscaling_group.example.name
}
Ovaj primjer koristi `aws_autoscaling_group` za stvaranje grupe za automatsko skaliranje i koristi `aws_cloudwatch_metric_alarm` za nadzor iskorištenosti CPU-a. Kada iskorištenost CPU-a premaši 70%, `scale_up` strategija će dodati jednu EC2 instancu, a kada iskorištenost CPU-a padne ispod 30%, `scale_down` strategija će smanjiti jednu EC2 instancu.
## Terraform najbolje prakse
Tweet od @@devops_nk spominje strukturu direktorija Terraforma i kako stvarni timovi upravljaju cloud infrastrukturom. Evo nekoliko najboljih praksi:
* **Struktura direktorija:** Usvojite jasnu strukturu direktorija, izolirajući konfiguracije različitih okruženja (dev, staging, prod) kako biste spriječili nenamjerni utjecaj na produkcijsko okruženje.
```
environments/
├── dev/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── terraform.tfvars
├── staging/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── terraform.tfvars
└── prod/
├── main.tf
├── variables.tf
├── outputs.tf
└── terraform.tfvars
```
* **Modularnost:** Podijelite infrastrukturu na module za višekratnu upotrebu, kao što su VPC modul, EC2 modul, modul baze podataka itd. To može pojednostaviti konfiguraciju i poboljšati održivost.
```terraform
module "vpc" {
source = "./modules/vpc"
name = "my-vpc"
cidr_block = "10.0.0.0/16"
}
```
* **Korištenje Variables i Outputs:** Koristite `variables.tf` za definiranje varijabli, a `outputs.tf` za izlaz važnih svojstava resursa, kao što su IP adrese i DNS nazivi.
```terraform
# variables.tf
variable "instance_type" {
type = string
default = "t2.micro"
}
# outputs.tf
output "public_ip" {
value = aws_instance.example.public_ip
}
```
* **Upravljanje stanjem:** Koristite Terraformovu značajku udaljenog upravljanja stanjem, kao što su Terraform Cloud, S3 ili Azure Blob Storage, kako biste osigurali dosljednost i sigurnost stanja.
```terraform
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "terraform.tfstate"
region = "us-east-1"
}
}
```* **Kontrola verzija:** Pohranite Terraform kod u Git repozitorij i koristite strategije grananja za kontrolu verzija.
* **CI/CD:** Integrirajte Terraform u CI/CD cjevovod za automatiziranu implementaciju i testiranje. Mnogi tweetovi spominju GitHub Actions i Jenkins, koji su popularni CI/CD alati koji se mogu integrirati s Terraformom. Projekt poput @@Abdulraheem183 je dobar primjer koji pokazuje kako koristiti GitHub Actions + Docker + Terraform za implementaciju aplikacije na AWS.
* **Pregled koda:** Provedite pregled koda kako biste osigurali kvalitetu i sigurnost koda.
* **Koristite Terraform CLI alate:** `terraform fmt` za formatiranje koda, `terraform validate` za validaciju koda.
## Preporučeni Terraform alati
* **Terraform Cloud:** Pruža upravljanje udaljenim stanjem, suradnju i automatizaciju.
* **Terragrunt:** Omotava Terraform, pružajući bolju DRY (Don't Repeat Yourself) podršku i lakše upravljivu strukturu direktorija.
* **tfsec:** Alat za statičku analizu koda za otkrivanje sigurnosnih ranjivosti u Terraform kodu.
* **Checkov:** Još jedan alat za statičku analizu koda za otkrivanje sigurnosnih ranjivosti i problema s neusklađenošću u Terraform kodu.
* **Kiro.dev + MCP (Managed Cloud Platform):** Kao što je @@RoxsRoss spomenuo, ovi alati mogu automatski generirati dijagrame arhitekture infrastrukture, što je vrlo korisno za razumijevanje i održavanje složene infrastrukture. Poveznice: [https://github.com/awslabs/mcp](https://github.com/awslabs/mcp) i [https://kiro.dev](https://kiro.dev)
* **hcpt:** @@nnstt1 je spomenuo CLI alat za HCP Terraform koji je u razvoju i vrijedan je pažnje.
## Ograničenja i izazovi Terraforma
* **Krivulja učenja:** Terraform ima određenu krivulju učenja, posebno za timove bez IaC iskustva (Infrastructure as Code - Infrastruktura kao kod).
* **Upravljanje stanjem:** Upravljanje Terraform datotekama stanja je vrlo važno, a ako se datoteka stanja ošteti ili izgubi, to može dovesti do ozbiljnih problema.
* **Složenost:** Za složenu infrastrukturu, Terraform kod može postati vrlo složen i težak za održavanje. @@Achinedu001_ je spomenuo da je nakon implementacije pomoću Terraforma korisničko sučelje postalo glavobolja, zahtijevajući često prebacivanje između različitih dijelova konzole. To naglašava važnost dobre modularnosti i jasnog arhitektonskog dizajna.
* **Upravljanje ovisnostima:** Upravljanje ovisnostima Terraform modula i pružatelja usluga može biti izazovno.
## ZaključakTerraform je moćan IaC alat koji vam može pomoći da poboljšate učinkovitost, smanjite troškove i bolje kontrolirate svoje cloud okruženje. Slijedeći najbolje prakse, koristeći odgovarajuće alate i pazeći na ograničenja Terraforma, možete učinkovitije koristiti Terraform i ostvariti velike koristi od njega. Nadamo se da će vam ovaj praktični vodič pomoći da bolje savladate Terraform i primijenite ga u stvarnim projektima.





