首页 > 解决方案 > 通过 ASG 启动时为 Terraform 提取 EC2 实例 ID

问题描述

我想通过 Terraform 创建带有一些指标的 AWS CloudWatch 仪表板。我的所有基础设施都在 Terraform 中进行了描述,并且我了解如何创建 AWS CloudWatch 仪表板(Terraform + json 模板)。卡在 AWS AutoScaling 组中。当我想在仪表板上显示一些指标时,我只使用类似的结构

some_monitored_instance_id = "${aws_instance.some_instance.id}"

然后将其放入json模板中

    "metrics": [
      ["AWS/EC2", "CPUUtilization", "InstanceId", "${some_monitored_instance_id}"]
    ],

当实例通过

     resource "aws_instance" "some_instance" {}

但是当实例通过 AutoScaling Group 启动时,我不能使用这种方法。当通过 AutoScaling 组(和启动配置)启动实例以供将来在 Terraform 中使用时,如何提取实例 ID?

标签: amazon-web-servicesamazon-ec2terraforminfrastructure-as-code

解决方案


首先,你真的不应该。ASG 会更改实例,这些 ID 也会更改。Cloudwatch 为 ASG 提供指标。因此,您可以查看 ASG 创建的实例的指标。您还可以创建资源组并按资源组获取指标。

但是,如果你真的想这样做:

data "aws_instances" "test" {
  instance_tags = {
    SomeTag = "SomeValue"
  }

  instance_state_names = ["running", "stopped"]
}

output ids {
    value = data.aws_instances.test.ids
}

如果您在启动时在 EC2 上设置的启动配置中放置一个标签,这将起作用。

这有效,因为:

instance_tags - (可选)标签映射,每对必须与所需实例上的一对完全匹配


推荐阅读