我正在使用terragrunt中的相同模块为2个单独的应用程序创建以下内容
我的问题是如何引用在app2中为app1创建的安全组?
例如
在应用程序1中我可以引用为 security_groups = [“ $ {aws_security_group.sec_group_A.id}”] 如何在app2中引用相同的安全组?
resource "aws_security_group" "sec_group_A" {
name = "sec_group_A"
...
...
}
resource "aws_elb" "bar" {
name = "foobar-terraform-elb"
security_groups = ["${aws_security_group.sec_group_A.id}"]
...
...
}
答案 0 :(得分:0)
我没有使用terragrunt的经验,但是通常我会从项目根目录中的“ main.tf”文件中调用模块。文件夹结构示例如下
.
├── main.tf
└── modules
├── app1
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── app2
├── main.tf
├── outputs.tf
└── variables.tf
我的app1输出。tf声明了安全组A输出
output "sec_group_a" { value = "${aws_security_group.sec_group_A}" }
然后我可以在项目根目录的main.tf文件中调用此输出。看起来像下面的
module "app1" {
source = "./modules/app1"
...
// Pass in my variables
}
module "app2" {
source = "./modules/app2"
sec_group_A = "${module.app1.sec_group_A}"
...
//Pass in the rest of my variables
}
最后在app2模块内部,您可以像调用其他任何变量一样调用它。
resource "aws_elb" "bar" {
name = "foobar-terraform-elb"
security_groups = ["${var.sec_group_A.id}"]
...
...
}
我会在https://www.terraform.io/docs/modules/index.html上阅读模块,以更好地了解它们如何组合在一起。
或者,只要将sec_group_A声明为app1中的输出,就可以从远程状态(如果已配置)中获取数据。参见https://www.terraform.io/docs/providers/terraform/d/remote_state.html
答案 1 :(得分:0)
在app2中,您可以:
data "aws_security_group" "other" {
name = "sec_group_A"
}
,然后使用ID:
resource "aws_elb" "bar" {
name = "foobar-terraform-elb"
security_groups = ["${data.aws_security_group.other.id}"]
...
...
}
(使用data
的注意事项是您要运行两个单独的terraform apply
-一个配置创建该组,而其他配置引用该组)。