Praktická príručka Terraform: Osvojte si infraštruktúru ako kód, zvýšte efektivitu a znížte náklady
Tento príklad ukazuje, ako nastaviť automatické škálovanie (Auto Scaling) AWS s použitím CloudWatch alarmov. Vytvoríme Auto Scaling Group, politiky škálovania a CloudWatch alarmy, ktoré spúšťajú škálovanie na základe využitia CPU.
resource "aws_launch_configuration" "example" {
name_prefix = "example-"
image_id = "ami-0c55b2a98c006c9c8" # Nahraďte správnym AMI ID
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_type = "EC2"
health_check_grace_period = 300
launch_configuration = aws_launch_configuration.example.name
vpc_zone_identifier = ["subnet-0bb1c79de3EXAMPLE", "subnet-0bb2c79de3EXAMPLE"]
# Životný cyklus, aby sa najprv vytvorili nové inštancie pred zničením starých
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, keď CPU servera prekročí 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, keď CPU servera klesne pod 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
}
Tento príklad používa `aws_autoscaling_group` na vytvorenie skupiny automatického škálovania a používa `aws_cloudwatch_metric_alarm` na monitorovanie využitia CPU. Keď využitie CPU prekročí 70 %, stratégia `scale_up` pridá jednu inštanciu EC2 a keď využitie CPU klesne pod 30 %, stratégia `scale_down` zníži počet inštancií EC2.
## Osvedčené postupy Terraformu
Tweet od @@devops_nk spomína štruktúru adresárov Terraformu a ako tímy v skutočnosti spravujú cloudovú infraštruktúru. Tu je niekoľko osvedčených postupov:
* **Štruktúra adresárov:** Používajte jasnú štruktúru adresárov na izoláciu konfigurácií rôznych prostredí (dev, staging, prod), aby ste predišli neočakávaným dopadom na produkčné prostredie.
```
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
```
* **Modularizácia:** Rozdeľte infraštruktúru na opakovane použiteľné moduly, ako napríklad VPC modul, EC2 modul, databázový modul atď. To môže zjednodušiť konfiguráciu a zlepšiť údržbu.
```terraform
module "vpc" {
source = "./modules/vpc"
name = "my-vpc"
cidr_block = "10.0.0.0/16"
}
```
* **Používanie Variables a Outputs:** Použite `variables.tf` na definovanie premenných a `outputs.tf` na výstup dôležitých atribútov zdrojov, ako sú IP adresy a DNS názvy.
```terraform
# variables.tf
variable "instance_type" {
type = string
default = "t2.micro"
}
# outputs.tf
output "public_ip" {
value = aws_instance.example.public_ip
}
```
* **Správa stavu:** Používajte funkciu vzdialenej správy stavu Terraformu, ako napríklad Terraform Cloud, S3 alebo Azure Blob Storage, aby ste zaistili konzistentnosť a bezpečnosť stavu.
```terraform
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "terraform.tfstate"
region = "us-east-1"
}
}
```* **Správa verzií:** Ukladajte kód Terraform v repozitári Git a používajte stratégie vetvenia na správu verzií.
* **CI/CD:** Integrujte Terraform do CI/CD potrubia na implementáciu automatizovaného nasadzovania a testovania. Mnohé tweety spomínajú GitHub Actions a Jenkins, ktoré sú populárne CI/CD nástroje, ktoré je možné integrovať s Terraform. Projekt ako @@Abdulraheem183 je dobrým príkladom, ktorý ukazuje, ako používať GitHub Actions + Docker + Terraform na nasadenie aplikácie do AWS.
* **Kontrola kódu:** Vykonávajte kontroly kódu, aby ste zaistili kvalitu a bezpečnosť kódu.
* **Používanie CLI nástrojov Terraform:** `terraform fmt` formátuje kód, `terraform validate` validuje kód.
## Odporúčané nástroje pre Terraform
* **Terraform Cloud:** Poskytuje vzdialenú správu stavu, spoluprácu a automatizačné funkcie.
* **Terragrunt:** Zapuzdruje Terraform, poskytuje lepšiu podporu DRY (Don't Repeat Yourself) a ľahšie spravovateľnú štruktúru adresárov.
* **tfsec:** Nástroj na statickú analýzu kódu na detekciu bezpečnostných zraniteľností v kóde Terraform.
* **Checkov:** Ďalší nástroj na statickú analýzu kódu na detekciu bezpečnostných zraniteľností a problémov s nesúladom v kóde Terraform.
* **Kiro.dev + MCP (Managed Cloud Platform):** Ako spomenul @@RoxsRoss, tieto nástroje dokážu automaticky generovať diagramy architektúry infraštruktúry, čo je veľmi užitočné na pochopenie a údržbu komplexnej infraštruktúry. Odkazy: [https://github.com/awslabs/mcp](https://github.com/awslabs/mcp) a [https://kiro.dev](https://kiro.dev)
* **hcpt:** @@nnstt1 spomenul CLI nástroj pre HCP Terraform, ktorý je vo vývoji a stojí za pozornosť.
## Obmedzenia a výzvy Terraform
* **Krivka učenia:** Terraform má určitú krivku učenia, najmä pre tímy bez skúseností s IaC.
* **Správa stavu:** Správa stavových súborov Terraform je veľmi dôležitá. Ak sa stavový súbor poškodí alebo stratí, môže to spôsobiť vážne problémy.
* **Komplexnosť:** Pre komplexnú infraštruktúru sa kód Terraform môže stať veľmi komplexným a ťažko udržiavateľným. @@Achinedu001_ spomenul, že po nasadení pomocou Terraform sa používateľské rozhranie stalo bolestivé a vyžadovalo si časté prepínanie medzi rôznymi časťami konzoly. To zdôrazňuje dôležitosť dobrej modularity a jasného architektonického návrhu.
* **Správa závislostí:** Správa závislostí modulov a poskytovateľov Terraform môže byť náročná.
## ZáverTerraform je výkonný nástroj IaC, ktorý vám môže pomôcť zvýšiť efektivitu, znížiť náklady a lepšie kontrolovať vaše cloudové prostredie. Dodržiavaním osvedčených postupov, používaním správnych nástrojov a vedomím si obmedzení Terraformu môžete Terraform efektívnejšie využívať a získať z neho obrovské výhody. Dúfam, že táto praktická príručka vám pomôže lepšie zvládnuť Terraform a aplikovať ho v reálnych projektoch.




