### Provider definition provider "aws" { region = var.aws_region } data "aws_vpc" "main" { id = module.discovery.vpc_id } ### Usage du module discobery pour utiliser directement les elements de notr VPC custom # ami = "ami-0144fa93c0eb299d2" module "discovery" { source = "../discovery-module" aws_region = var.aws_region vpc_name = var.vpc_name } ### Security groups resource "aws_security_group" "allow_80_from_inet" { name = "allow_80_from_inet" description = "allow_80_from_inet inbound traffic" vpc_id = module.discovery.vpc_id ingress { description = "HTTP 80 from internet" from_port = 80 to_port = 80 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"] } tags = { Name = "allow_80_from_inet" } } resource "aws_security_group" "allow_8080_from_vpc" { name = "allow_8080_from_vpc" description = "allow_8080_from_vpc inbound traffic" vpc_id = module.discovery.vpc_id ingress { description = "allow_8080_from_vpc from VPC" from_port = 8080 to_port = 8080 protocol = "tcp" cidr_blocks = [data.aws_vpc.main.cidr_block] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "allow_8080_from_vpc" } } ### Create an AWS ALB resource "aws_lb" "front_end" { name = "front-end-lb-tf" internal = false load_balancer_type = "application" security_groups = [aws_security_group.allow_80_from_inet.id] subnets = module.discovery.public_subnets # notre liste de sous réseaux enable_deletion_protection = true tags = { Environment = "production" } } resource "aws_lb_target_group" "front_end" { name = "tf-front-end-lb-tg" port = 8080 # port sur lequel les targets web reçoivent le traffic protocol = "HTTP" vpc_id = module.discovery.vpc_id } resource "aws_lb_listener" "front_end" { load_balancer_arn = aws_lb.front_end.arn port = "80" protocol = "HTTP" default_action { type = "forward" target_group_arn = aws_lb_target_group.front_end.arn } } ### Create the AWS Autoscaling template & group resource "aws_launch_template" "web_template" { name = "web_template" capacity_reservation_specification { capacity_reservation_preference = "open" } image_id = "ami-0144fa93c0eb299d2" # notre ami custom ami-0144fa93c0eb299d2 instance_initiated_shutdown_behavior = "terminate" instance_type = "t2.micro" monitoring { enabled = true } disable_api_termination = true vpc_security_group_ids = [aws_security_group.allow_8080_from_vpc.id] tag_specifications { resource_type = "instance" tags = { Name = "${var.vpc_name}-template-web" } } } resource "aws_autoscaling_group" "as_group" { vpc_zone_identifier = module.discovery.private_subnets desired_capacity = 3 max_size = 4 min_size = 3 target_group_arns = [aws_lb_target_group.front_end.arn] launch_template { id = aws_launch_template.web_template.id version = "$Latest" } }