【发布时间】:2021-07-06 15:33:00
【问题描述】:
我不确定这是否是正确的方法,但我想使用变量作为属性。
例如,我有一个根据用户输入更改的变量:os_name = ubuntu。
我想像下面这样使用这个变量名,
resource "aws_instance" "workerNode" {
..................
ami = data.aws_ami.${var.os_name}.image_id
..................
}
以下是数据块的示例,
data "aws_ami" "suse" {
count = "${var.os_name == "suse" ? 1 : 0}"
owners = ["amazon"]
most_recent = true
filter {
name = "name"
values = ["suse-sles-${var.os_version}-sp*-v????????-hvm-ssd-x86_64"]
}
}
结果如下,
"architecture" = "x86_64"
"hypervisor" = "xen"
"id" = "ami-0d3905203a039e3b0"
"image_id" = "ami-0d3905203a039e3b0"
但是 terraform 不允许我这样做。有什么办法可以做到这一点,或者我必须改变工作流程?
【问题讨论】:
-
data.aws_ami是地图吗?你能补充一下它的结构吗? -
@yvesonline 是的。为了您的方便,我添加了更多示例。
-
interpolation syntax 仅适用于字符串,不适用于变量/数据访问。您需要在排序映射中构建您的 AMI,以便通过键访问它们。
-
问题不在于我如何访问密钥。问题是如何使查询动态化。
标签: terraform terraform-provider-aws