amazon-web-services - Terraform:无法在实例上创建 cloudwatch 警报
问题描述
我正在尝试创建一个 cloudwatch 警报,如下所示:
module "superb_queue_api-a" {
source = "../../Modules/Services"
no_of_inst = 1
ami_id = "${data.aws_ami.ubuntu.id}"
instance_type = "t2.micro"
subnets = "${data.terraform_remote_state.state_pull.prod-pvt-sub-a}"
key = "sup_queue_inst"
sec-group = ["${aws_security_group.ec2_sg.id}"]
tp = "${var.is_production ? true : false}"
instance-name = "sup-queue-api-a"
}
resource "aws_cloudwatch_metric_alarm" "queue_1" {
alarm_name = "sup-queue-api-a"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "120"
statistic = "Average"
threshold = "90"
dimensions {
InstanceId = "${module.superb_queue_api-a.ec2-instance}"
}
alarm_description = "This metric monitors ec2 cpu utilization"
alarm_actions = ["${var.terraform_elb_name}"]
}
我有以下模块来旋转实例
resource "aws_instance" "ec2_instances" {
count = "${var.no_of_inst}"
#count = "${var.countt}"
ami = "${var.ami_id}"
instance_type = "${var.instance_type}"
#vpc_id = "${var.vpc}"
subnet_id = "${var.subnets}"
key_name = "${var.key}"
vpc_security_group_ids = ["${var.sec-group}"]
disable_api_termination = "${var.tp}"
root_block_device {
volume_size = 100
volume_type = "gp2"
}
tags {
Name = "${var.instance-name}"
}
}
output.tf 具有以下内容
output "ec2-instance" {
value = "${aws_instance.ec2_instances.*.id}"
}
output "private_ip" {
value = "${aws_instance.ec2_instances.*.private_ip}"
}
我收到以下错误:
Error: Error running plan: 1 error(s) occurred:
* aws_cloudwatch_metric_alarm.queue_1: dimensions (InstanceId): '' expected type 'string', got unconvertible type '[]interface {}'
有人可以帮我吗 ?
解决方案
问题是 module.superb_queue_api-a.ec2-instance 是一个数组,因为该模块正在创建多个实例,并且模块的输出是一个包含所有实例 ID 的数组。
我已经修改了代码,因此它为每个实例创建了一个警报:
resource "aws_cloudwatch_metric_alarm" "queue_1" {
count = "${length(module.superb_queue_api-a.ec2-instance)}"
alarm_name = "sup-queue-api-a-${module.superb_queue_api-a.ec2-instance[count.index]}"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "120"
statistic = "Average"
threshold = "90"
dimensions {
InstanceId = "${module.superb_queue_api-a.ec2-instance[count.index]}"
}
alarm_description = "This metric monitors ec2 cpu utilization"
alarm_actions = ["${var.terraform_elb_name}"]
}
推荐阅读
- node.js - 使用 elasticsearch 客户端时主机标头无效
- java - 为什么在检查字符串相等时 assertThat 不能正常工作?
- java - 存储和更新 svg 文档
- python-3.x - 对象中的列表被覆盖
- c++ - 允许这种浮点优化吗?
- php - 如何从一个字段 Textarea 向数据库添加一些行?
- server - 地址已与 redis-server 一起使用
- hibernate - 如何添加带有继承 SINGLE_TABLE 的 oneToMany 映射
- swift - 如何访问命中测试的索引?
- vue.js - 导入引导错误:意外的令牌,test-utils,在一个测试中工作,但不是另一个