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

相关推荐
lee_curry7 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
QQ1__8115175158 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态8 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子8 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室8 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI8 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing8 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者8 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册8 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李8 小时前
2026 年 Web 前端开发的 8 个趋势!
前端