【发布时间】:2021-10-12 12:04:38
【问题描述】:
我正在开发一个 100% 的 terraform 项目,我正在尝试将一个模块的输出值用于另一个模块。根据不同的 StackOverflow 帖子,将模块 a 的输出导入模块 b 的最流行方法是在模块 b 中引用模块 a,例如:
modules/b/main.tf
module "a" {
source = "./modules/a"
}
之后,您可以从模块a 中的模块b 访问输出变量。
我的项目结构
├── main.tf # declaring all my modules here
├── modules
│ ├── accounts
│ │ ├── main.tf
│ │ └── variables.tf
│ └── organizations
│ ├── main.tf
│ ├── outputs.tf # the var. that I wanna use in accounts
│ └── variables.tf
├── providers.tf
├── variables.tf
└── versions.tf
所以我的问题是我在 main.tf 中声明我的所有模块
main.tf
module "organizations" {
source = "./modules/organizations"
}
module "accounts" {
source = "./modules/accounts"
}
但是,我需要将模块/组织的一个输出用于模块/帐户。我发现这样做的唯一方法是在我的modules/accounts/main.tf 中拥有(另一个)组织模块
模块/帐户/main.tf
module "organizations" {
source = "../organizations"
}
resource "aws_organizations_account" "this" {
name = "uuuu"
email = "udduu@gmail.com"
parent_id = module.organizations.sandbox_organizational_unit_id #HERE
}
但由于我的main.tf 中已经有一个organizations 模块,它会在我的organization 模块中创建/删除资源两次。
organisations/main.tf
data "aws_organizations_organization" "root" {}
locals {
root_id = data.aws_organizations_organization.root.roots[0].id
}
resource "aws_organizations_organizational_unit" "sandboxs" {
name = var.aws_sandboxs_unit_name
parent_id = local.root_id
}
organisations/outputs.tf
output "sandbox_organizational_unit_id" {
value = aws_organizations_organizational_unit.sandboxs.id
description = "ID of the Sandboxs OU"
sensitive = false
}
【问题讨论】:
-
您需要在第一个模块中定义
outputs,在第二个模块中定义variables 以传递所需的所有信息。 -
我的第一个模块中已经有了输出,但是如何在第二个模块中使用变量来引用它?
-
module "organizations" { [...] some_variable = module.accounts.some_output } -
这正是我目前所拥有的,但由于我也在我的根
main.tf中声明了相同的模块organizations,所以我每次申请时都会复制资源 -
然后把它移到一个地方,我不关心组织模块是在哪里创建的,但它应该只声明一次。
标签: terraform