Основы Terraform
Terraform — это инструмент Infrastructure as Code (IaC) от HashiCorp для создания и управления инфраструктурой.
▸Установка
1# macOS2brew install terraform34# Проверка версии5terraform version
Провайдеры
1terraform {2 required_providers {3 aws = {4 source = "hashicorp/aws"5 version = "~> 5.0"6 }7 }8}910provider "aws" {11 region = "us-east-1"12}
Ресурсы
▸EC2 Instance
1resource "aws_instance" "web" {2 ami = "ami-0c55b159cbfafe1f0"3 instance_type = "t2.micro"45 tags = {6 Name = "WebServer"7 }8}
▸S3 Bucket
1resource "aws_s3_bucket" "data" {2 bucket = "my-data-bucket-${var.environment}"3}45resource "aws_s3_bucket_versioning" "data" {6 bucket = aws_s3_bucket.data.id7 versioning_configuration {8 status = "Enabled"9 }10}
▸VPC
1resource "aws_vpc" "main" {2 cidr_block = "10.0.0.0/16"34 tags = {5 Name = "main-vpc"6 }7}89resource "aws_subnet" "public" {10 vpc_id = aws_vpc.main.id11 cidr_block = "10.0.1.0/24"1213 tags = {14 Name = "public-subnet"15 }16}1718resource "aws_internet_gateway" "gw" {19 vpc_id = aws_vpc.main.id20}
Переменные
1variable "environment" {2 description = "Environment name"3 type = string4 default = "dev"5}67variable "instance_type" {8 description = "EC2 instance type"9 type = string10 default = "t2.micro"11}1213variable "db_password" {14 description = "Database password"15 type = string16 sensitive = true17}
▸terraform.tfvars
1environment = "production"2instance_type = "t3.medium"3db_password = "secret123"
Outputs
1output "instance_ip" {2 description = "Public IP of the instance"3 value = aws_instance.web.public_ip4}56output "bucket_name" {7 description = "Name of the S3 bucket"8 value = aws_s3_bucket.data.bucket9}
Модули
1# modules/vpc/main.tf2resource "aws_vpc" "this" {3 cidr_block = var.cidr_block4}56variable "cidr_block" {7 type = string8}910output "vpc_id" {11 value = aws_vpc.this.id12}1314# Использование модуля15module "vpc" {16 source = "./modules/vpc"17 cidr_block = "10.0.0.0/16"18}
Состояние
1terraform {2 backend "s3" {3 bucket = "my-terraform-state"4 key = "prod/terraform.tfstate"5 region = "us-east-1"6 dynamodb_table = "terraform-locks"7 encrypt = true8 }9}
Рабочий процесс
1# Инициализация2terraform init34# План изменений5terraform plan67# Применение8terraform apply910# Уничтожение11terraform destroy1213# Просмотр состояния14terraform state list15terraform state show aws_instance.web
Best Practices
Храните состояние в remote backend
Используйте variables для параметризации
Модулизуйте повторяющуюся инфраструктуру
Используйте workspaces для сред
Версионируйте Terraform и провайдеры
Заключение
Terraform позволяет управлять инфраструктурой как кодом. Declarative подход, modules и remote state обеспечивают reproducible и масштабируемую инфраструктуру.