在与创建角色的位置不同的文件夹中访问role_arn

时间:2017-09-14 13:44:55

标签: amazon-web-services terraform

我有一个Terraform结构,如:

prod
nonprod
applications
+-- continuous/common/iam/iam.tf  <-- create the role
+-- dataflow/firehose/firehose.tf  <-- want to refer to the role created above

我不知道该怎么做。在iam的.tf文件中,我有:

resource "aws_iam_role" "policy_daily_process_role" {
...
}

output "svc_daily_process_role_arn" {
  value = "${aws_iam_role.policy_daily_process_role.arn}"
}

我不知道如何(或者如果)我可以从firehose的.tf中引用svc_daily_process_role_arn。

3 个答案:

答案 0 :(得分:2)

我的理解是您已经使用模块来管理terraform代码。

所以在你的情况下,至少应该有两个模块。

continuous/common
dataflow/firehose

continuous/common模块中,您已定义output.tf

output "svc_daily_process_role_arn" {
  value = "${aws_iam_role.policy_daily_process_role.arn}"
}

因此,首先使用通用模块创建资源。

module "common" {
  source = "./continuous/common"
  ...
}

现在您可以使用以下代码引用模块common的输出:

module "firehost" {
  source = "./dataflow/firehose"

  some_variable = "${module.common.svc_daily_process_role_arn}"
  ...
}

请仔细阅读以下文件以便更好地理解。

https://www.terraform.io/docs/modules/usage.html#outputs

答案 1 :(得分:1)

使用Terraform模块。

https://www.terraform.io/docs/modules/usage.html

从顶层调用两个子目录。

在模块1(您的IAM角色)中添加一个类似的输出,但确保它从模块1输出。

在模块2中通过$ {module ..}

引用它

答案 2 :(得分:0)

如果您不使用模块(或者即使您使用模块),则可以使用remote state。这意味着您将在S3或Consul中保存您的状态,然后从代码中的任何位置引用它。