如何使用terraform兄弟目录中的代码

时间:2018-04-10 00:12:13

标签: amazon-web-services terraform terraform-provider-aws

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

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

我想使用我在brother/main.tf sister/main.tf中创建的定义,而我似乎无法找到正确的方法。我试过使用模块:

module "brother" {
    source = "../brother"
}

这样做有效,但事实并非如此。我能够导入和使用代码,但由于某种原因,terraform使用新的模块名称创建了一堆具有新资源名称的其他资源(如果这有意义)。从本质上讲,它创建了所需的资源,但也创造了100多个其他不需要的资源。

我可以通过将我想要使用的定义放在同一个sister目录中来轻松实现此功能,但这不是我想要构建文件的方式。这样做的正确方法是什么?如果我有brother中定义的IAM角色,并且我想在sister中引用它,我该怎么做?提前致谢!

编辑:

当前代码:

姐姐/ main.tf

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

哥/ ma​​in.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
}

基本上,我希望能够使用test_assume_role中的sister/main.tf arn。

2 个答案:

答案 0 :(得分:2)

当您需要其他模块时,它将重新创建这些资源。 听起来你想引用已经创建的资源的状态。您可以使用remote state data source执行此操作。

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

data "terraform_remote_state" "brother" {
  backend = "..."
}

resource "aws_instance" "sister" {
  # ...
  subnet_id = "${data.terraform_remote_state.brother.my_output}"
}

答案 1 :(得分:1)

将资源属性输出到Terraform状态并使用<section> <iri>http://www.sample.com/myontology#class1</iri> <infoList> <info type="text" property="http://www.sample.com/myontology#hasLastName" required="true" /> <info type="text" property="http://www.sample.com/myontology#hasFirstName" required="true" /> <info type="text" property="http://www.sample.com/myontology#hasEmail" required="false" /> <info type="text" property="http://www.sample.com/myontology#hasPhone" required="false" /> </infoList> </section> <section> <iri>http://www.sample.com/myontology#class2</iri> <infoList> <info type="text" property="http://www.sample.com/myontology#hasLastName" required="true" /> <info type="text" property="http://www.sample.com/myontology#hasUser" required="false" /> <info type="text" property="http://www.sample.com/myontology#hasRole" required="false" /> </infoList> </section> 数据源读取它的替代方法是尽可能在第一时间为您的资源使用适当的数据源。

在这种情况下,您可以使用aws_iam_role data source按名称查找ARN以获取IAM角色:

terraform_remote_state