Terraform 如何将服务器ID的元组展平为字符串?

Terraform 如何将服务器ID的元组展平为字符串?,terraform,Terraform,我正在尝试创建一个文件,其中包含使用count属性生成的多个服务器主机的ID: resource "aws_instance" "workers" { count = "${var.worker_count}" ... } 有没有办法将元组展平为字符串 我尝试过该方法,但它只接受基元类型。是我的解决方案: instance_ids = ["${aws_instance.controller.id}","${aws_instance.gateway.id

我正在尝试创建一个文件,其中包含使用
count
属性生成的多个服务器主机的ID:

resource "aws_instance" "workers" {
  count                  = "${var.worker_count}"
  ...
}
有没有办法将元组展平为字符串

我尝试过该方法,但它只接受基元类型。

是我的解决方案:

instance_ids = ["${aws_instance.controller.id}","${aws_instance.gateway.id}","${join("\",\"", aws_instance.workers.*.id)}"]

从列表生成字符串的最佳方式取决于具体情况,因为在字符串中表示列表有很多不同的方式

对于这种特殊情况,JSON数组/字符串语法似乎与Python语法足够兼容,您可以使用
JSONECODE
生成Python列表表达式:

导入boto3
#Boto连接
ec2=boto3.resource('ec2',${jsonencode(var.region)})
def lambda_处理程序(事件、上下文):
#检索实例ID
实例_id=${jsonencode(
海螺(
[
aws_instance.controller.id,
aws_instance.gateway.id,
],
aws_实例.workers.*.id
)
)}
#停止实例
正在停止\u instances=ec2.instances.filter(instanceId=instance\u id).stop()
对于需要将大量数据传递到用另一种语言编写的程序中,并且JSON语法可能与目标语言不完全一致的情况,一个更通用的解决方案是将数据结构作为JSON传递,然后使用该语言自己的JSON解析器对其进行解析

如果您知道所有的值都是字符串(如本例中所示),您还可以简化事情,使用
join
函数将所有字符串值与一些分隔符连接在一起,然后使用Python的
split
方法将其拆分,结果的源代码看起来更不像是人类手工编写的

 447:   instance_ids = ["${aws_instance.controller.id}", 
              "${aws_instance.gateway.id}", "${aws_instance.workers.*.id}"]
 449: 
 450: 
 451: 
    |----------------
    | aws_instance.workers is tuple with 3 elements

Cannot include the given value in a string template: string required.
instance_ids = ["${aws_instance.controller.id}","${aws_instance.gateway.id}","${join("\",\"", aws_instance.workers.*.id)}"]