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)}"]