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"的实例。

相关推荐
无名客01 小时前
npm run dev 启动项目 报Error: listen EACCES: permission denied 0.0.0.0:80 解决方法
前端·javascript·vue.js
零点七九1 小时前
vue npm install卡住没反应
前端·vue.js·npm
墨菲安全1 小时前
NPM组件 @0xme5war/apicli 等窃取主机敏感信息
前端·npm·node.js·主机信息窃取·npm恶意包·npm投毒
Komorebi_99991 小时前
vue create 项目名 和 npm init vue@latest 创建vue项目的不同
前端·vue.js·npm
fouryears_234174 小时前
适配器模式——以springboot为例
java·spring boot·适配器模式
好好研究4 小时前
使用JavaScript实现轮播图的自动切换和左右箭头切换效果
开发语言·前端·javascript·css·html
汽车功能安全啊5 小时前
利用对称算法及非对称算法实现安全启动
java·开发语言·安全
paopaokaka_luck6 小时前
基于Spring Boot+Vue的吉他社团系统设计和实现(协同过滤算法)
java·vue.js·spring boot·后端·spring
Warren987 小时前
Java Stream流的使用
java·开发语言·windows·spring boot·后端·python·硬件工程
程序视点8 小时前
IObit Uninstaller Pro专业卸载,免激活版本,卸载清理注册表,彻底告别软件残留
前端·windows·后端