прикрепить группу безопасности, созданную в другом приложении - PullRequest
0 голосов
/ 14 июня 2019

структура папок .

Я создаю следующее для 2 отдельных приложений, использующих те же модули в Terragrunt

  • LB
  • 1010 * Случаи *
  • Группы безопасности

мой вопрос: как мне ссылаться на группу безопасности, созданную для app1 в app2?

например.

в приложении 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}"]
  ...
  ...
  }

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

В приложении 2 вы можете:

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 s - одна конфигурация создает группу, а другая конфигурация ссылается на группу).

0 голосов
/ 14 июня 2019

У меня нет опыта использования terragrunt, но обычно я вызываю свои модули из файла "main.tf" в корне проекта. Пример структуры папок ниже

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

Мой app1 output.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

...