Files
ENI-Terraform/main.tf
2026-03-31 11:51:58 +02:00

91 lines
1.8 KiB
HCL

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
}