Terraform资源地址

在编码时有时会需要引用一些资源的输出属性或是一些模块的输出值,这都涉及到如何在代码中引用特定模块或是资源。另外在执行某些命令行操作时也需要显式指定一些目标资源,这时要掌握Terraform的资源路径规则。

一个资源地址是用以在一个庞大的基础设施中精确引用一个特定资源对象的字符串,一个地址由两部分组成:[module path][resource spec]

模块路径

一个模块路径在模块树上定位了一个特定模块,它的形式是这样的:module.module_name[module index]

  • module:module关键字标记了这时一个子模块而非根模块,在路径中可以包含多个module关键字
  • module_name:用户定义的模块名
  • [module index]:访问多个子模块中特定实例的索引,由方括号包围(可选)

一个不包含具体资源的地址,例如module.foo代表了模块内所有的资源(如果只是单个模块而不是多实例模块),或者是多实例模块的所有实例。要指代特定模块实例的所有资源,需要在地址中附带下标,例如module.foo[0]

如果地址中模块部分被省略,那么地址就指代根模块资源。

一个多module关键字应用于多实例模块的例子:module.foo[0].module.bar["a"]

注意 ,由于模块的countfor_each元参数是Terraform 0.13开始引进的,所以多实例模块地址也只能在0.13及之后的版本使用。

资源地址形式

一个资源地址定位了代码中特定资源对象,它的形式是这样的:resource_type.resource_name[resource index]

  • resource_type:资源类型
  • resource_name:用户定义的资源名称
  • [resource index]:访问多实例资源中特定资源实例的索引,由方括号包围(可选)

多实例模块与资源的访问索引

以下规约适用于访问多实例模块及资源时使用的索引值:

  • [N]:当使用count元参数时N是一个自然数,如果省略,并且count > 1,那么指代所有的实例
  • ["INDEX"]:当使用for_each元参数时INDEX是一个字母数字混合的字符串

资源地址示例

count的例子

给定一个代码定义:

resource "aws_instance" "web" {
  count = 4
}

给定一个地址:aws_instance.web[3],它指代的是最后一个名为web的aws_instance实例;给定地址aws_instance.web,指代的是所有名为web的aws_instance实例。

for_each的例子

给定如下代码:

resource "aws_instance" "web" {
  for_each = {
    "terraform": "value1",
    "resource":  "value2",
    "indexing":  "value3",
    "example":   "value4",
  }
}

地址aws_instance.web["example"]引用的是aws_instance.web中键为"example"的实例。

相关推荐
小鼠米奇2 分钟前
小程序的数据驱动和vue的双向绑定有何异同?
前端·vue.js·小程序
真的很上进4 分钟前
前端速通面经八股系列(二)—— HTML篇
前端·html
best keyl12 分钟前
tomcat利用 nginx 反向代理
java·nginx·tomcat
Code成立13 分钟前
Tomcat热加载和热部署
java·tomcat·tomcat热加载·tomcat热部署
hotslow14 分钟前
Web应用服务器Tomcat
java·tomcat
听风客129 分钟前
机器人走路问题优化解法
java·算法·记忆化搜索·递归
赐你岁月如歌33 分钟前
如何使用ssm实现校园美食交流系统+vue
java·后端·ssm
Super Minion34 分钟前
Java重修笔记 第四十二天 LinkedList 类、ArrayList 和 LinkedList 比较
java·开发语言·笔记
计算机编程指导师36 分钟前
如何用Java SpringBoot和Vue搭建高效的OA办公管理系统?
java·vue.js·spring boot·后端·mysql·web·办公
ZachOn1y1 小时前
Java 入门指南:初识 Java 异常(Exception)
java·开发语言·后端·java-ee·团队开发·个人开发