amazon-web-services - 通过 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?
解决方案
首先,你真的不应该。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 - (可选)标签映射,每对必须与所需实例上的一对完全匹配
- 见文档
推荐阅读
- activemq - ActiveMQ - 如何忽略未传递的消息
- arm - L2 Cache Miss 是否等同于 ARMv7 A15 上的“L2 Data Cache Refill”?
- r - Rstudio 不会加载 Rcmdr
- javascript - 从文件夹导入 webpack 排除不必要的模块
- c# - 为什么第一个插入在 Cassandra 中胜过第二个插入?
- awk - awk 行到多列
- c++ - C++中的向量初始化
- java - 我需要一个例子来实现通用多态性(尤其是包含)
- php - 如何连接 mssql 服务器并使用 php 获取值
- angular - *ngIf Firestore 与查询集合 / angularfire2