我正在尝试使用同级目录中的特定代码,但这样做时遇到了一些麻烦。例如,请参阅下面的文件结构:
parents/
brother/
main.tf
outputs.tf
variables.tf
sister/
main.tf
outputs.tf
variables.tf
我想使用我在sister/main.tf
brother/main.tf
中创建的定义,但我似乎无法找到正确的方法。我尝试使用模块:
module "brother" {
source = "../brother"
}
这样做有效,但事实并非如此。我能够导入和使用代码,但由于某种原因,terraform 使用新的模块名称(如果这有任何意义)使用新的资源名称创建一堆其他资源。从本质上讲,它创建了所需的资源,但也创建了100 +其他不需要的资源。
通过将我想使用的定义放在同一个sister
目录中,我可以轻松地使其工作,但这不是我想要构建文件的方式。正确的方法是什么?如果我有一个在brother
中定义的 IAM 角色,并且我想在sister
中引用它,我该怎么做?提前感谢!
编辑:
当前代码:
姐姐/主
resource "aws_config_config_rule" "test-rule" {
name = "test-rule"
source {
owner = "AWS"
source_identifier = "TEST"
}
depends_on = ["aws_config_configuration_recorder.config_configuration_recorder"]
}
resource "aws_config_configuration_recorder" "config_configuration_recorder" {
name = "config_configuration_recorder"
role_arn = "${var.test_assume_role_arn}"
}
兄弟/主.tf
resource "aws_iam_role" "test_assume_role" {
name = "${var.test_assume_role_name}"
path = "/"
assume_role_policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
POLICY
}
所以基本上,我希望能够在sister/main.tf
中使用test_assume_role
arn。
当您需要另一个模块时,它将重新创建这些资源。 听起来您想引用已创建资源的状态。可以使用远程状态数据源执行此操作。
这允许您读取另一个状态的输出,但不创建其他资源
data "terraform_remote_state" "brother" {
backend = "..."
}
resource "aws_instance" "sister" {
# ...
subnet_id = "${data.terraform_remote_state.brother.my_output}"
}
将资源的属性输出到 Terraform 状态并使用terraform_remote_state
数据源读取该属性的替代方法是,尽可能首先为您的资源使用适当的数据源。
在这种情况下,您可以使用aws_iam_role
数据源按名称查找 IAM 角色的 ARN:
data "aws_iam_role" "example" {
name = "an_example_role_name"
}