如何使用地形同级目录中的代码



我正在尝试使用同级目录中的特定代码,但这样做时遇到了一些麻烦。例如,请参阅下面的文件结构:

parents/
brother/
main.tf
outputs.tf
variables.tf
sister/
main.tf
outputs.tf
variables.tf

我想使用我在sister/main.tfbrother/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_rolearn。

当您需要另一个模块时,它将重新创建这些资源。 听起来您想引用已创建资源的状态。可以使用远程状态数据源执行此操作。

这允许您读取另一个状态的输出,但不创建其他资源

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"
}

相关内容

  • 没有找到相关文章

最新更新