【问题标题】:Extract EC2 instance ids for Terraform when launched via ASG通过 ASG 启动时为 Terraform 提取 EC2 实例 ID
【发布时间】:2020-12-29 21:20:05
【问题描述】:

我想通过 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 Group(和启动配置)启动时,如何提取实例 ID 以供将来在 Terraform 中使用?

【问题讨论】:

  • 通常您不需要这样做。 ASG 中的实例可以随时更换。如果您现在创建这样的仪表板,一旦实例因 AZ 重新平衡、缩小/缩小活动等而被替换,仪表板将无用。

标签: amazon-web-services amazon-ec2 terraform infrastructure-as-code


【解决方案1】:

首先,你真的不应该。 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 - (可选)标签映射,每对必须与所需实例上的一对完全匹配

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 2020-03-10
    • 2018-03-13
    • 2023-04-02
    • 2018-11-13
    • 2020-06-22
    • 2019-06-26
    • 1970-01-01
    • 2022-10-22
    相关资源
    最近更新 更多