Browse Source

refacto tf autoscalling

master
art.dambrine 4 years ago
parent
commit
0ef8a3a02c
  1. 19
      .terraform.lock.hcl
  2. 157
      main.tf
  3. 8
      outputs.tf
  4. 10
      variables.tf

19
.terraform.lock.hcl

@ -0,0 +1,19 @@
# This file is maintained automatically by "terraform init".
# Manual edits may be lost in future updates.
provider "registry.terraform.io/hashicorp/aws" {
version = "3.27.0"
hashes = [
"h1:ccxtk7jAtmBPvAEXswOEYJcyp5jTD9QlQeg8GEzYmxQ=",
"zh:2986eb5a1ffbb0336c6390aad533b62efc832aa8aa5460d523e1f2daa4f42f79",
"zh:825317cdb80860833125a856c0befc877cba22d41c631c5a7ca22400693d4356",
"zh:a47aad668cc74058f508c56c5407cd715dbb9b6389aa68d37543e897895db43f",
"zh:c0011502d0eb4637918127c3987a8cc07a015ea00f74f4956fd111c736286a4d",
"zh:d5088ab51043bb2239132f4ed3760292b6aa4f7296232e4b8017f8c5c34f051a",
"zh:d893658e983eb17a23a8124c79a910cc729cb1d751d5509b8e756101c828ad91",
"zh:dcc4384ee79ea9492c87eb01e664f7f6b1f1d156471476f30b28336c9d9a4aec",
"zh:e4abfaf013f31791cd029af7b6f989f73e3efca28fe2917057b428d051c4085f",
"zh:f2a4d9446d23afe2a42421e7d5f902d34451fb31b7787b5e3aef95c08fec5ced",
"zh:f54a6af10b077db9dc11556c27f59ba5c60e1b2ba96fe3aa9cd90d8c67d980f6",
]
}

157
main.tf

@ -1,8 +1,161 @@
### Provider definition
provider "aws" {
region = "${var.aws_region}"
region = var.aws_region
}
### Module Main
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"
}
}

8
outputs.tf

@ -1 +1,9 @@
# Décommentez le output dicovery pour découvrir le VPC
# output "discovery" {
# value = module.discovery
# }
output "vpc_id" {
value = module.discovery.vpc_id
}

10
variables.tf

@ -1 +1,11 @@
variable "aws_region" {
type = string
default = "us-east-1"
}
variable "vpc_name" {
type = string
default = "mycould"
description = "VPC name"
}

Loading…
Cancel
Save