91 lines
1.8 KiB
HCL
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
|
|
}
|