terraform - Terraform 无法通过索引引用资源
问题描述
我有一个这样的 aws 实例
resource "aws_instance" "an_instance" {
count = "${var.instance_count}"
......
}
效果很好,但是当我添加这个片段时
resource "aws_ebs_volume" "on_host_1_1" {
availability_zone = "${aws_instance.an_instance[1].availability_zone}"
snapshot_id = "snap-abcdca8ee59112345f"
tags = "${local.all_tags}"
}
我收到以下错误:
Error reading config for aws_ebs_volume[on_host_1_1]: parse error at 1:31: expected "}" but found "."
有什么想法有什么问题吗?
Terraform v0.11.14
+ provider.aws v2.25.0
解决方案
您需要使用正确的语法来引用列表的特定元素。您可以在此处查看文档。特别注意提到的部分:
要引用资源的特定实例,您可以使用
resource.foo.*.id[#]
where#
是实例的索引号。
因此,具有正确语法的资源将是:
resource "aws_ebs_volume" "on_host_1_1" {
availability_zone = "${aws_instance.an_instance.*.availability_zone[1]}"
snapshot_id = "snap-abcdca8ee59112345f"
tags = "${local.all_tags}"
}
这会给你你想要的行为。之所以可行,是因为 splat 运算符*
正确地向 Terraform 表明资源输出是一个列表,而不是单个元素类型。
推荐阅读
- php - php 使用 curl_multi 多次卷曲到同一个 API
- api - 使用 Python 的 Bittrex API 无效签名响应
- python-3.x - 如果 list_of_list[0] 中的元素不起作用,则在非 python 模式下将列表列表传递给 numba 函数
- java - 油漆组件不会运行
- node.js - 发布请求的“正文”始终为 unicode
- altbeacon - Altbeacon 和 bootstrap 始终默认为默认信标格式
- java - 当我只知道它的 jsonPath 时如何创建一个 json
- html - CSS - 在图像外的 4 个边角显示信息
- r - 在 R 中绘制有用的航空公司数据?
- elasticsearch - 后过滤日期直方图聚合桶结果不起作用