我正在将一些现有的基础设施导入 Terraform(确切地说是 Github 存储库和团队)。
我的 Terraform 资源基于可重复使用的模块。
例如,我有一个repo
模块,可以将 vars 传递到其中以创建一个新的 Github 存储库。
我的存储库和团队拥有不同的状态文件。repo
模块调用团队资源的远程状态,以获取拥有该模块的团队的 team_id。
这需要我的team
模块为每个创建一个输出team_id
。
对于新的 repos 和团队来说,这很有效。
但是,我的旧团队资源不是使用 Terraform 创建的。它们是导入的,因此从未创建过输出。
我不知道如何向每个team
模块添加必要的输出。我尝试手动更新 terraform.tfstate 文件:
"outputs": {
"team_id": {
"sensitive": false,
"type": "string",
"value": "2814777"
}
},
但是当我运行命令时:
terraform output module.my_team.github_team.team
答复说没有定义输出。
如果组成这些模块的资源是导入的而不是使用 Terraform 创建的,那么是否有推荐的方法将输出值添加到模块?
答案1
所以我自己解决了这个问题。您实际上可以手动更新状态文件以向模块添加输出。要点是:
使用 时terraform_remote_state
,模块输出仅当它们存在于根模块中时才可用。您无法远程引用嵌套在根模块中的模块中的输出。
将输出引用为变量并不是很直观。我最初尝试过这个:
${data.terraform_remote_state.my_teams.outputs.team_a_id.value}
正确的插值是:
${data.terraform_remote_state.my_teams.team_a_id}