На главную
DevOps и серверы
Каркас Terraform
Каркас проекта Terraform: фиксированные версии, переменные с проверкой, хранилище состояния, сервер с файрволом у AWS, Hetzner или Yandex Cloud, выходные значения и .gitignore, который не даст закоммитить состояние.
Проект
dev, stage или prod
Состояние Terraform содержит все значения, включая пароли и ключи. Его нельзя держать в git — поэтому в наборе сразу лежит .gitignore, а для командной работы состояние переезжает в хранилище с блокировкой.
Файлы
main.tf
data "aws_ami" "ubuntu" {
most_recent = true
owners = ["099720109477"] # Canonical
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*"]
}
}
resource "aws_security_group" "app" {
name = "${var.project}-${var.env}"
description = "Доступ к приложению"
ingress {
description = "SSH"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = var.ssh_cidr
}
ingress {
description = "HTTPS"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "app" {
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
vpc_security_group_ids = [aws_security_group.app.id]
root_block_device {
volume_size = 20
encrypted = true
}
tags = {
Name = "${var.project}-${var.env}"
}
}
Порядок команд
terraform init terraform fmt -recursive terraform validate terraform plan -out=tfplan # посмотрели план глазами — и только потом terraform apply tfplan