How to fix a code to solve this issue? I had two instances id in a code but it should be passing from variables. After ELB is run I should be able to run dns name of ELB to open for example view of my wordpress instance in browser. How to fix it? The rest of code works fine. ....................................................................................................
resource "aws_vpc" "myvpc"{
cidr_block = "192.168.0.0/16"
instance_tenancy = "default"
enable_dns_hostnames = true
tags = {
Name = "newvpc"
}
}
resource "aws_subnet" "firstsubnet"{
vpc_id = aws_vpc.myvpc.id
cidr_block = "192.168.1.0/24"
availability_zone = "${var.availability_zone1}"
map_public_ip_on_launch = true
tags = {
Name = "public_subnet"
}
}
resource "aws_subnet" "secondsubnet"{
vpc_id = aws_vpc.myvpc.id
cidr_block = "192.168.2.0/24"
availability_zone = "${var.availability_zone2}"
tags = {
Name = "private_subnet"
}
}
resource "aws_instance" "wp" {
ami = "ami-07d9160fa81ccffb5"
instance_type = "t2.micro"
vpc_security_group_ids = ["${aws_security_group.mysc1.id}"]
subnet_id = aws_subnet.firstsubnet.id
key_name = "MyKey"
user_data = "${file("wordpress.sh")}"
tags = {
Name = "wordpress"
}
connection {
type = "ssh"
user = "ec2-user"
private_key = file("./MyKey.pem")
host = aws_instance.wp.public_ip
}
}
module "asg" {
source = "terraform-aws-modules/autoscaling/aws"
version = "~> 3.0"
name = "service"
# Launch configuration
lc_name = "example-lc"
image_id = "ami-ebd02392"
instance_type = "t2.micro"
security_groups = ["${aws_security_group.mysc1.id}"]
ebs_block_device = [
{
device_name = "/dev/xvdz"
volume_type = "gp2"
volume_size = "50"
delete_on_termination = true
},
]
root_block_device = [
{
volume_size = "50"
volume_type = "gp2"
},
]
# Auto scaling group
asg_name = "example-asg"
vpc_zone_identifier = ["${aws_subnet.firstsubnet.id}", "${aws_subnet.secondsubnet.id}"]
health_check_type = "EC2"
min_size = 0
max_size = 2
desired_capacity = 2
wait_for_capacity_timeout = 0
tags = [
{
key = "Environment"
value = "dev"
propagate_at_launch = true
},
{
key = "Project"
value = "megasecret"
propagate_at_launch = true
},
]
tags_as_map = {
extra_tag1 = "extra_value1"
extra_tag2 = "extra_value2"
}
}
module "elb_http" {
source = "terraform-aws-modules/elb/aws"
version = "~> 2.0"
name = "elb-example"
subnets = ["${aws_subnet.firstsubnet.id}", "${aws_subnet.secondsubnet.id}"]
security_groups = ["${aws_security_group.mysc1.id}"]
internal = false
listener = [
{
instance_port = "80"
instance_protocol = "HTTP"
lb_port = "80"
lb_protocol = "HTTP"
},
{
instance_port = "8080"
instance_protocol = "http"
lb_port = "8080"
lb_protocol = "http"
#ssl_certificate_id = "arn:aws:acm:eu-west-1:235367859451:certificate/6c270328-2cd5-4b2d-8dfd-ae8d0004ad31"
},
]
health_check = {
target = "HTTP:80/"
interval = 30
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 5
}
# // ELB attachments
number_of_instances = 2
instances = ["i-06ff41a77dfb5349d", "i-4906ff41a77dfb53d"]
tags = {
Owner = "user"
Environment = "dev"
}
}
If you want to use classic load balancer (ELB) with your ASG, you have to interconnect them. This means, that you do not need explicitly specify instances
in your elb_http
module.
This is done by setting load_balancers attribute of your asg
module:
module "asg" {
# other attributes
load_balancers = [module.elb_http.this_elb_id]
}
This will ensure that instance created by ASG will be automatically registered with ASG.
Full example of such a setup is:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.