简体   繁体   English

Terraform:无法在实例上创建cloudwatch警报

[英]Terraform : Unable to create cloudwatch alarm on a instance

I am trying to create a cloudwatch alarm as follows: 我正在尝试创建一个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}"]
}

I am having the following module to spin instance 我有以下模块来旋转实例

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}"
  }
}

The output.tf has the following output.tf具有以下内容

output "ec2-instance" {
  value = "${aws_instance.ec2_instances.*.id}"
}

output "private_ip" {
  value = "${aws_instance.ec2_instances.*.private_ip}"
}

I am getting the following error: 我收到以下错误:

Error: Error running plan: 1 error(s) occurred:

* aws_cloudwatch_metric_alarm.queue_1: dimensions (InstanceId): '' expected type 'string', got unconvertible type '[]interface {}'

Can someone help me out ? 有人可以帮我吗 ?

The problem is that module.superb_queue_api-a.ec2-instance is an array, because that module is creating more than one instance, and the output of the module is an array with the ids of all instances. 问题在于module.superb_queue_api-a.ec2-instance是一个数组,因为该模块创建了多个实例,并且模块的输出是一个包含所有实例ID的数组。

I've adapted the code so it creates an alarm for every instance: 我修改了代码,以便为每个实例创建一个警报:

 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}"]
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Terraform AWS Cloudwatch 警报 - Terraform AWS Cloudwatch alarm 是否可以使用 Terraform 为 AutoScaling 组的同一 CloudWatch 警报创建多个条件? - It is possible to create multiple conditions for the same CloudWatch alarm for AutoScaling group with Terraform? 如何通过 Terraform 创建 EKS 节点的 Cloudwatch 警报 - How to create Cloudwatch Alarm of EKS Nodes via Terraform Terraform:Cloudwatch Canary Synthetics,如何创建指标警报 - Terraform: Cloudwatch Canary Synthetics, How to create metric alarm 使用 Terraform 的 CloudWatch 指标警报 - CloudWatch metric alarm using Terraform 如何在创建新 EC2 实例时创建自动 Cloudwatch 警报 - How to create automatic Cloudwatch alarm on New EC2 instance creation 如何使用 Terraform 在 cloudwatch 警报中定位特定 RDS 实例? - How do I target a specific RDS instance within a cloudwatch alarm using Terraform? 无法通过Terraform在CloudWatch警报中使用单位 - Cannot use unit in cloudwatch alarm via Terraform 针对 ApproximateNumberOfMessagesVisible 阈值的 AWS CloudWatch 警报的 Terraform - Terraform for an AWS CloudWatch Alarm for ApproximateNumberOfMessagesVisible Threshold Terraform 查找和填充 AWS cloudwatch 警报本身 - Terraform to lookup and fill AWS cloudwatch alarm itself
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM