Praktični vodič za Terraform: Savladajte infrastrukturu kao kod, poboljšajte efikasnost i smanjite troškove
Ovaj primjer pokazuje kako konfigurirati automatsko skaliranje pomoću CloudWatch alarma. Kada iskorištenost CPU-a servera premaši 70%, pokreće se politika skaliranja prema gore. Kada iskorištenost CPU-a servera padne ispod 30%, pokreće se politika skaliranja prema dolje.
resource "aws_launch_configuration" "example" {
name_prefix = "example-"
image_id = "ami-0c55b947cbdd38441" # Zamijenite odgovarajućim AMI ID-jem
instance_type = "t2.micro"
lifecycle {
create_before_destroy = true
}
}
resource "aws_autoscaling_group" "example" {
name = "example-asg"
max_size = 3
min_size = 1
health_check_grace_period = 300
health_check_type = "EC2"
desired_capacity = 1
force_delete = true
launch_configuration = aws_launch_configuration.example.name
vpc_zone_identifier = ["subnet-0bb1c79de3EXAMPLE", "subnet-0bb934653EXAMPLE"]
# Ovdje se koristi lifecycle blok kako bi se osiguralo da se nova ASG kreira prije uništavanja stare.
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 kada CPU servera pređ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 kada je CPU servera 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 kreiranje grupe za automatsko skaliranje i koristi `aws_cloudwatch_metric_alarm` za praćenje iskorištenosti CPU-a. Kada iskorištenost CPU-a pređe 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. Slijede neke najbolje prakse:
* **Struktura direktorija:** Usvojite jasnu strukturu direktorija, izolirajući konfiguracije različitih okruženja (dev, staging, prod) kako biste spriječili nenamjeran 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
```
* **Modularizacija:** Podijelite infrastrukturu na module za višekratnu upotrebu, kao što su VPC modul, EC2 modul, modul baze podataka itd. Ovo može pojednostaviti konfiguraciju i poboljšati održavanje.
```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 i koristite `outputs.tf` za izvoz važnih atributa resursa, kao što su IP adrese i DNS imena.
```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 funkciju 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 pipeline za automatizaciju implementacije i testiranja. Mnogi tweetovi spominju GitHub Actions i Jenkins, koji su popularni CI/CD alati koji se mogu integrirati s Terraformom. Projekat poput @@Abdulraheem183 je dobar primjer koji pokazuje kako koristiti GitHub Actions + Docker + Terraform za implementaciju aplikacije na AWS.
* **Pregled koda:** Izvršite pregled koda kako biste osigurali kvalitetu i sigurnost koda.
* **Korištenje Terraform CLI alata:** `terraform fmt` formatira kod, `terraform validate` validira kod.
## Preporučeni Terraform alati
* **Terraform Cloud:** Pruža udaljeno upravljanje 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, koji se koristi za otkrivanje sigurnosnih propusta u Terraform kodu.
* **Checkov:** Još jedan alat za statičku analizu koda, koji se koristi za otkrivanje sigurnosnih propusta i problema s neusklađenošću u Terraform kodu.
* **Kiro.dev + MCP (Managed Cloud Platform):** Kao što je spomenuo @@RoxsRoss, ovi alati mogu automatski generirati dijagrame arhitekture infrastrukture, što je vrlo korisno za razumijevanje i održavanje složene infrastrukture. Linkovi: [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 pažnje.
## Ograničenja i izazovi Terraforma
* **Kriva učenja:** Terraform ima određenu krivu učenja, posebno za timove bez IaC iskustva.
* **Upravljanje stanjem:** Upravljanje Terraform datotekama stanja je vrlo važno, 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. Ovo naglašava važnost dobre modularnosti i jasnog dizajna arhitekture.
* **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 efikasnost, smanjite troškove i bolje kontrolišete svoje cloud okruženje. Prateći najbolje prakse, koristeći odgovarajuće alate i obraćajući pažnju na ograničenja Terraforma, možete efikasnije 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.




