如何确定 terraform 中 aws_instance.main.*.public_ip 中的数字

Posted

技术标签:

【中文标题】如何确定 terraform 中 aws_instance.main.*.public_ip 中的数字【英文标题】:How to determine the number in aws_instance.main.*.public_ip in terraform 【发布时间】:2018-07-31 10:41:16 【问题描述】:

我想在我第一个制作的服务器和我第二个及以后制作的服务器的输出结果中添加不同的消息,并显示它。

我想做的最后如下。

output
  ec2global_ips  [
    manager_ip is : xxx,
    node ip is: [xxx,xxx]
]

目前我的 output.tf 代码如下。

output "ec2_global_ips" 
  value = ["$aws_instance.main.*.public_ip"]

为此,我认为有必要在某处判断aws_instance.main.0.public_ipaws_instance.main.1.public_ip并换一个值

有没有办法用 terraform 制作这样的东西? var.count 函数不能用于 output.tf 等。

【问题讨论】:

为什么不把它们分成 2 个不同的输出,这样你就有 ec2_manager_ipsec2_node_ips 【参考方案1】:

您可以使用切片和元素插值(代码未经测试):

output "ec2_global_ips" 
  value = "$
    map(
      "manager_ip", "$element(aws_instance.main.*.public_ip, 0)"
      "node_ips", "$slice(aws_instance.main.*.public_ip, 1, length(aws_instance.main.*.public_ip))"
    )
  "

根据您想要的输出判断,您似乎正在寻找 manager_ip 是一个字符串(因此是元素而不是它的切片)和 node_ips 是一个列表。这应该可以满足您的需求。

【讨论】:

没问题。实际上我不记得很多插值命令,每当我想知道 Terraform 是否可以做某事时,我都会查看文档 (terraform.io/docs/configuration/interpolation.html)。

以上是关于如何确定 terraform 中 aws_instance.main.*.public_ip 中的数字的主要内容,如果未能解决你的问题,请参考以下文章

定义:Terraform - AWS - aws_instance - user_data

使用 Terraform 创建多个 DNS Route53 A 记录

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

AWS on Terraform - 如何避免“强制使用新资源”

VPC 内的 Terraform Spot 实例

避免更新 Terraform 中的资源