Following aws autoscaling course from https://github.com/Lowess
				
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							161 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							161 lines
						
					
					
						
							3.2 KiB
						
					
					
				| ### 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" | |
|   } | |
| } | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |