首页 > 解决方案 > 附加在另一个应用程序中创建的安全组

问题描述

文件夹结构

我正在使用 terragrunt 中的相同模块为 2 个单独的应用程序创建以下内容

我的问题是如何在 app2 中引用为 app1 创建的安全组?

例如。

在 app1 中,我可以将其引用为 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}"]
  ...
  ...
  }

标签: terraformterragrunt

解决方案


我没有使用 terragrunt 的经验,但通常我会从项目根目录中的“main.tf”文件中调用我的模块。下面是一个示例文件夹结构

.
├── main.tf
└── modules
    ├── app1
    │   ├── main.tf
    │   ├── outputs.tf
    │   └── variables.tf
    └── app2
        ├── main.tf
        ├── outputs.tf
        └── variables.tf

我的 app1 outputs.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


推荐阅读