我正在尝试使用Terraform创建自动缩放组的cloudwatch警报。我已经将terraform模块与github源一起用于cloudwatch警报。
我用于设置自动缩放组的代码是:
resource "aws_launch_configuration" "main" {
name_prefix = "${format("%s-%s-postgres-", var.name, var.environment)}"
instance_type = "${var.instance_type}"
image_id = "${var.ami}"
key_name = "${var.key_name}"
iam_instance_profile = "${aws_iam_instance_profile.server.id}"
security_groups = ["${var.security_groups}", "${aws_security_group.main.id}"]
user_data = "${data.template_file.main.rendered}"
root_block_device {
volume_size = "${var.root_volume_size}"
volume_type = "gp2"
delete_on_termination = true
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_autoscaling_group" "main" {
count = "${var.size}"
name = "${var.name}-${var.environment}-postgres-asg-${count.index}"
launch_configuration = "${aws_launch_configuration.main.name}"
max_size = "${var.max_size}"
min_size = "${var.min_size}"
desired_capacity = "${var.desired_capacity}"
health_check_type = "EC2"
health_check_grace_period = 600
force_delete = false
load_balancers = ["${aws_elb.main.name}"]
vpc_zone_identifier = ["${element(var.subnet_ids, count.index % length(var.subnet_ids))}"]
termination_policies = ["OldestLaunchConfiguration", "Default"]
depends_on = ["aws_launch_configuration.main"]
tags = ["${list(
map(
"key", "Name",
"value", "${var.name}-${var.environment}-postgres-${count.index}",
"propagate_at_launch", true
),
map(
"key", "role",
"value", "postgres",
"propagate_at_launch", true
),
map(
"key", "LaunchConfigName",
"value", "${aws_launch_configuration.main.name}",
"propagate_at_launch", true
),
map(
"key", "ServerGroupIndex",
"value", count.index,
"propagate_at_launch", true
),
map(
"key", "Function",
"value", "${var.name}",
"propagate_at_launch", true
),
map(
"key", "Stage",
"value", "${var.environment}",
"propagate_at_launch", true
)
)}"]
lifecycle {
create_before_destroy = true
}
}
用于Cloudwatch警报的Terraform代码为:
module "alarm-asg-cpu" {
source = "git::git@github.com:gruntwork-io/module-aws-monitoring.git//modules/alarms/asg-cpu-alarms?ref=v0.9.1"
alarm_sns_topic_arns = ["${var.ebs_backup_sns_topic}"]
asg_names = ["${aws_autoscaling_group.main.name}"]
num_asg_names ="1"
high_cpu_utilization_threshold = "10"
high_cpu_utilization_period = "60"
high_cpu_utilization_evaluation_periods = "1"
high_cpu_utilization_statistic = "Average"
}
module "alarm-asg-disk" {
source = "git::git@github.com:gruntwork-io/module-aws-monitoring.git//modules/alarms/asg-disk-alarms?ref=v0.9.1"
alarm_sns_topic_arns = ["${var.ebs_backup_sns_topic}"]
asg_names = ["${aws_autoscaling_group.main.name}"]
num_asg_names ="1"
file_system = "/dev/xvdh"
mount_path = "/var/lib/pgsql"
high_disk_utilization_threshold = "10"
high_disk_utilization_period = "60"
high_disk_utilization_evaluation_periods = "1"
high_disk_utilization_statistic = "Maximum"
}
当我运行Terraform Plan命令时。它显示以下错误:
我陷入了这个问题。我该如何解决这个问题?
答案 0 :(得分:0)
因此您可以在资源自动缩放中设置计数
resource "aws_autoscaling_group" "main" {
count = "${var.size}"
...
将按照以下格式创建资源,具体取决于您设置的大小计数。
aws_autoscaling_group.main[0]
aws_autoscaling_group.main[1]
aws_autoscaling_group.main[2]
...
然后,当您从module "alarm-asg-cpu"
进行引用时,也需要对其进行设置计数。
这就是为什么它找不到资源aws_autoscaling_group.main
但是terraform中存在一个未解决的问题,您无法在模块中设置count
https://github.com/hashicorp/terraform/issues/953
因此,您需要考虑其他解决方法,例如,不要使用count
创建资源aws_autoscaling_group
,而是逐个创建资源