terraform:根据资源计数创建列表

Posted

技术标签:

【中文标题】terraform:根据资源计数创建列表【英文标题】:terraform: create list based on resource count 【发布时间】:2018-11-13 12:18:02 【问题描述】:

我们有一堆实例(我知道......牛,不是宠物,但在这种情况下,这些真的是宠物)

resource "aws_instance" "read_00" 
  count = "$var.read_00_count"

resource "aws_instance" "read_01" 
  count = "$var.read_01_count"

我们有一个 ELB,我们希望根据它们的计数变量动态添加实例,如下所示:

resource "aws_elb" "read_slaves" 
  instances = ["$aws_instance.read_.*.id"]

但这当然行不通。

只有当它们的计数不为零时,是否可以动态创建实例 ID 列表?

我知道这有悖常理,但如果这是可能的,那就太棒了。

【问题讨论】:

【参考方案1】:

使用 Terraform 0.12 会容易得多,但现在可以这样做:

[...]
resource "aws_instance" "read_01" 
  [...]
  count = "$var.read_01_count"
  tags 
    Role = "read_slave"
  


data "aws_instances" "read-slaves" 
  instance_tags 
    Role = "read_slave"
  
  // optional filters


resource "aws_elb" "read_slaves" 
  instances = ["$data.aws_instances.read-slaves.ids"]

  listener 
    ...
  

因此:

标记每个充当读取从属设备的实例 收集aws_intances的列表 根据收集的数据创建aws_elb

【讨论】:

可能值得指出的是,这在第一次应用时不起作用,因为数据源找不到任何实例。

以上是关于terraform:根据资源计数创建列表的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 用户 TF_VAR 不工作的嵌套模块

在 aws_route53_record terraform 资源中使用“计数”

Terraform 学习笔记

Terraform 在资源名称中使用 count.index

Terraform 启用 VM Insights

Terraform:如何从对象列表创建 API 网关端点和方法?