地形问题与ALB和自动缩放组



在输出结束时,我得到以下错误:

错误:向目标组注册目标错误:ValidationError:实例ID 'arn:aws:elasticloadbalancing:us-west-2:993276023740:targetgroup/ilab-app-loadbalancer/52c7cb8bc3d39e61'无效状态码:400,请求id: abedd3c2-d905-4af4-9a32-c1e30a9e4e1d

与aws_lb_target_group_attachment.ilab_tg_attach,在弹性。第48行,在资源"aws_lb_target_group_attachment"ilab_tg_attach"48: resource "aws_lb_target_group_attachment"ilab_tg_attach"{

这是我在地形中使用的代码:注意:有趣的是,它创建了目标组附件,它工作了,它添加了两个主机。

resource "aws_lb_target_group_attachment" "ilab_tg_attach" {
target_id        = aws_lb_target_group.ilab_alb.id
target_group_arn = aws_lb_target_group.ilab_alb.arn
port             = 80
}
resource "aws_autoscaling_group" "ilab_asg" {
name                      = "ilab_asg"
vpc_zone_identifier       = ["${aws_subnet.ilab_subnet_pub_a.id}", "${aws_subnet.ilab_subnet_pub_b.id}"]
launch_configuration      = aws_launch_configuration.ilab_lt.name
min_size                  = 2
max_size                  = 2
health_check_grace_period = 300
health_check_type         = "ELB"
force_delete              = true
target_group_arns         = [aws_lb_target_group.ilab_alb.arn]
tag {
key                 = "Name"
value               = "EC2 Instance"
propagate_at_launch = true
}
}

谢谢大家的帮助。对于任何想要正常工作的人来说,这里是我的alb/asg的完整代码。

#ALB,ASG,LT design = always up scenario, single server
#ALB 
resource "aws_lb_target_group" "ilab_alb" {
name        = "ilab-app-loadbalancer"
port        = 80
protocol    = "HTTP"
target_type = "instance"
vpc_id      = aws_vpc.imaginelabtf.id
health_check {
interval            = 10
path                = "/"
protocol            = "HTTP"
timeout             = 5
healthy_threshold   = 5
unhealthy_threshold = 2
}
}
resource "aws_lb" "ilab_lb" {
name               = "ilab-lb"
internal           = false
load_balancer_type = "application"
security_groups = [
"${aws_security_group.albonly.id}",
]
subnets = ["${aws_subnet.ilab_subnet_pub_a.id}", "${aws_subnet.ilab_subnet_pub_b.id}"]
tags = {
name = "ilab-AppLoadBalancer"
}
}
#Launch template
resource "aws_launch_configuration" "ilab_lt" {
name_prefix     = "ilab_launch_template"
image_id        = data.aws_ami.server_ami.id #might be wrong
instance_type   = "t2.micro"
key_name        = "imagine-key"
security_groups = ["${aws_security_group.allow_http_ssh.id}"]
user_data       = file("userdata.tpl")
}
resource "aws_lb_listener" "ilab_lb_listener" {
load_balancer_arn = aws_lb.ilab_lb.arn
port              = 80
protocol          = "HTTP"
default_action {
type             = "forward"
target_group_arn = aws_lb_target_group.ilab_alb.arn
}

}
resource "aws_autoscaling_group" "ilab_asg" {
name                      = "ilab_asg"
vpc_zone_identifier       = ["${aws_subnet.ilab_subnet_pub_a.id}", "${aws_subnet.ilab_subnet_pub_b.id}"]
launch_configuration      = aws_launch_configuration.ilab_lt.name
min_size                  = 2
max_size                  = 2
health_check_grace_period = 300
health_check_type         = "ELB"
force_delete              = true
target_group_arns         = [aws_lb_target_group.ilab_alb.arn]
tag {
key                 = "Name"
value               = "Ilab LB Instance"
propagate_at_launch = true
}
}
/*resource "aws_autoscaling_attachment" "ilab_asg_attachment" {
autoscaling_group_name = aws_autoscaling_group.ilab_asg.id
alb_target_group_arn   = aws_lb.ilab_lb.arn
}*/
#ASG Policies 
resource "aws_autoscaling_policy" "ilab_cpu_policy_up" {
name                   = "ilab_cpu_policy_scale_up"
autoscaling_group_name = aws_autoscaling_group.ilab_asg.name
adjustment_type        = "ChangeInCapacity"
scaling_adjustment     = 1
cooldown               = "300"
policy_type            = "SimpleScaling"
}
resource "aws_autoscaling_policy" "ilab_cpu_policy_down" {
name                   = "ilab_cpu_policy_scale_down"
autoscaling_group_name = aws_autoscaling_group.ilab_asg.name
adjustment_type        = "ChangeInCapacity"
scaling_adjustment     = -1
cooldown               = 300
policy_type            = "SimpleScaling"
}
#cloudwatch alarms
resource "aws_cloudwatch_metric_alarm" "ilab_cla_alarm" {
alarm_name          = "ilab_alarm_cpu"
alarm_description   = "Alarm When CPU is higher than 80%"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods  = "2"
metric_name         = "CPUUtilization"
namespace           = "AWS/EC2"
period              = "120"
statistic           = "Average"
threshold           = "80"
dimensions = {
"AutoScalingGroupName" = "${aws_autoscaling_group.ilab_asg.name}"
}
actions_enabled = true
alarm_actions   = ["${aws_autoscaling_policy.ilab_cpu_policy_up.arn}"]
}
resource "aws_cloudwatch_metric_alarm" "ilab_cla_normal" {
alarm_name          = "ilab_normal_cpu"
alarm_description   = "Alarm When CPU has dropped to 30%"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods  = "2"
metric_name         = "CPUUtilization"
namespace           = "AWS/EC2"
period              = "120"
statistic           = "Average"
threshold           = "30"
dimensions = {
"AutoScalingGroupName" = "${aws_autoscaling_group.ilab_asg.name}"
}
actions_enabled = true
alarm_actions   = ["${aws_autoscaling_policy.ilab_cpu_policy_down.arn}"]
}
#sns topics
resource "aws_sns_topic" "ilab_sns" {
name         = "ilab_sns_cpu_alarm"
display_name = "ILab CPU Alarm on ASG Instnace"
} #email subscription must be done in AWS console as it is not available in terraform.
resource "aws_autoscaling_notification" "ilab_asg_notice" {
group_names = ["${aws_autoscaling_group.ilab_asg.name}"]
topic_arn   = aws_sns_topic.ilab_sns.arn
notifications = [
"autoscaling:EC2_INSTANCE_LAUNCH",
"autoscaling:EC2_INSTANCE_TERMINATE",
"autoscaling:EC2_INSTANCE_LAUNCH_ERROR",
"autoscaling:EC2_INSTANCE_TERMINATE_ERROR",
]
}

您得到一个验证错误,因为target_id应该是您试图注册的目标的ID,而不是目标组本身。

来自地形文档:

target_id(必选)目标器的ID。这是实例的实例ID,或ECS容器的容器ID。如果目标器类型为ip,请指定ip地址。如果目标类型是lambda,则指定lambda的arn。如果目标类型为alb,则指定alb的编号。

它注册两个目标的原因是自动伸缩组实际上试图通过创建两个EC2实例(min_size = 2)来完成它的工作。由于您使用的是ASG,因此您可能希望将aws_lb_target_group_attachment全部去掉。

最新更新