terraform { required_version = ">= 1.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = var.aws_region profile = var.aws_profile default_tags { tags = { Owner = var.owner CourseId = var.course_id } } } # --- Zones de disponibilite --- data "aws_availability_zones" "available" { state = "available" } # --- VPC --- resource "aws_vpc" "main" { cidr_block = var.vpc_cidr enable_dns_support = true enable_dns_hostnames = true tags = { Name = "${var.trigramme}-vpc" } } # --- Sous-reseaux --- resource "aws_subnet" "subnets" { for_each = var.subnets vpc_id = aws_vpc.main.id cidr_block = each.value.cidr availability_zone = data.aws_availability_zones.available.names[index(keys(var.subnets), each.key)] tags = { Name = "${var.trigramme}-${each.value.name}" } } # --- Instances EC2 --- resource "aws_instance" "servers" { for_each = var.instances ami = each.value.ami instance_type = each.value.instance_type subnet_id = aws_subnet.subnets[each.value.subnet_key].id root_block_device { volume_size = var.root_volume_size volume_type = "gp3" } tags = { Name = "${var.trigramme}-${each.key}" } } # --- Volumes EBS additionnels --- resource "aws_ebs_volume" "additional" { for_each = var.instances availability_zone = aws_instance.servers[each.key].availability_zone size = var.ebs_volume_size type = "gp3" tags = { Name = "${var.trigramme}-ebs-${each.key}" } } resource "aws_volume_attachment" "attach" { for_each = var.instances device_name = "/dev/sdf" volume_id = aws_ebs_volume.additional[each.key].id instance_id = aws_instance.servers[each.key].id }