我有一个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。
答案 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}"
...
}
请仔细阅读以下文件以便更好地理解。
答案 1 :(得分:1)
使用Terraform模块。
https://www.terraform.io/docs/modules/usage.html
从顶层调用两个子目录。
在模块1(您的IAM角色)中添加一个类似的输出,但确保它从模块1输出。
在模块2中通过$ {module ..}
引用它答案 2 :(得分:0)
如果您不使用模块(或者即使您使用模块),则可以使用remote state。这意味着您将在S3或Consul中保存您的状态,然后从代码中的任何位置引用它。