我可以向已存在状态的 Terraform 模块添加输出吗?

我可以向已存在状态的 Terraform 模块添加输出吗?

我正在将一些现有的基础设施导入 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}

相关内容