Террагрунт использует ресурсы из другого окружения

Я хочу использовать ресурсы, в данном случае вывод модуля vpc, в другой среде. Цель состоит в том, чтобы снизить затраты для клиента за счет ресурсов стадии и разработчика в одном и том же vpc. Stage и dev имеют отдельные ecs-cluster, asg, lc, разные образы докеров в ecr и т. Д., Но должны находиться в одном vpc с одним и тем же балансировщиком нагрузки, а затем прослушивателем заголовка хоста для пересылки в конкретную целевую группу. Оба должны использовать одну и ту же базу данных и один и тот же балансировщик нагрузки.

Требование заключалось в том, чтобы иметь по n заказчиков со средами stage, dev и prod. Все папки клиента должны содержать три среды.

Моя структура папок

├── Terraform
│   ├── Customer1
│   ├── Customer2
│   ├── Customer3
│   ├── Customer4
│   ├── Customer5
│   ├── Global
│   │   ├── iam
│   │   │   └── terragrunt.hcl
│   ├── README.md
│   └── Customer6
│       ├── non-prod
│       │   ├── eu-central-1
│       │   │   ├── dev
│       │   │   │   ├── cloudwatch
│       │   │   │   │   └── terragrunt.hcl
│       │   │   │   ├── ec2
│       │   │   │   │   └── terragrunt.hcl
│       │   │   │   ├── ecs
│       │   │   │   │   └── terragrunt.hcl
│       │   │   │   ├── lambda
│       │   │   │   │   └── terragrunt.hcl
│       │   │   │   ├── rds
│       │   │   │   │   └── terragrunt.hcl
│       │   │   │   ├── terragrunt.hcl
│       │   │   │   ├── vars.hcl
│       │   │   │   └── vpc
│       │   │   │       └── terragrunt.hcl
│       │   │   ├── region.hcl
│       │   │   └── stage
│       │   │       ├── cloudwatch
│       │   │       │   └── terragrunt.hcl
│       │   │       ├── ec2
│       │   │       │   └── terragrunt.hcl
│       │   │       ├── ecs
│       │   │       │   └── terragrunt.hcl
│       │   │       ├── lambda
│       │   │       │   └── terragrunt.hcl
│       │   │       ├── rds
│       │   │       │   └── terragrunt.hcl
│       │   │       ├── terragrunt.hcl
│       │   │       ├── vars.hcl
│       │   │       └── vpc
│       │   │           └── terragrunt.hcl
│       │   └── terragrunt.hcl
│       └── prod
│           └── eu-central-1
│               ├── prod
│               │   ├── cloudwatch
│               │   │   └── terragrunt.hcl
│               │   ├── ec2
│               │   │   └── terragrunt.hcl
│               │   ├── ecs
│               │   │   └── terragrunt.hcl
│               │   ├── lambda
│               │   │   └── terragrunt.hcl
│               │   ├── rds
│               │   │   └── terragrunt.hcl
│               │   ├── terragrunt.hcl
│               │   ├── vars.hcl
│               │   └── vpc
│               │       └── terragrunt.hcl
│               └── region.hcl
└── Modules
    ├── cloudwatch
    │   ├── Main.tf
    │   ├── Outputs.tf
    │   └── Variables.tf
    ├── ec2
    │   ├── Main.tf
    │   ├── Outputs.tf
    │   └── Variables.tf
    ├── ecs
    │   ├── Main.tf
    │   ├── Outputs.tf
    │   └── Variables.tf
    ├── iam
    │   ├── Main.tf
    │   ├── Outputs.tf
    │   └── Variables.tf
    ├── lambda
    │   ├── Main.tf
    │   ├── Outputs.tf
    │   └── Variables.tf
    ├── rds
    │   ├── Main.tf
    │   ├── Outputs.tf
    │   └── Variables.tf
    ├── vpc
    │   ├── Main.tf
    │   ├── Outputs.tf
    │   ├── Variables.tf
    └── vpc-stage
        ├── Main.tf
        ├── Outputs.tf
        └── Variables.tf

Я читал о данных terraform_remote_state, но это на уровне модуля. Для меня это не лучший подход делать это на уровне модуля, потому что это только для среды сцены. Есть ли способ получить выходные данные из удаленного состояния в terragrunt.hcl в папке stage из среды разработки, чтобы использовать их в качестве входных данных для модуля ec2?

Я использовал

dependency "vpc" {
  config_path = "../vpc"
}

а потом

vpc_id = dependency.vpc.outputs.vpc_id

для ввода модуля ec2, но только если он находится в той же среде.

С наилучшими пожеланиями.


person Cramble    schedule 12.09.2019    source источник


Ответы (1)


В показанной выше структуре каталогов у вас есть VPC как в среде разработки, так и в рабочей среде. Похоже, вы хотите, чтобы разработчик и сцена совместно использовали VPC, поэтому первое, что нужно сделать, это переместить этот каталог VPC за пределы dev и stage. Поместите vpc в eu-west-1, затем вы можете использовать его как зависимость как для разработчика, так и для сцены, как захотите.

Customer6
│       ├── non-prod
            └── eu-central-1
                ├── dev
                │   └── ecs
                ├── stage
                │   └── ecs
                └──  vpc
dependency "vpc" {
  config_path = "../../vpc"
}

См. Документацию Terragrunt на Передача выходных данных между модулями.

person Ben Whaley    schedule 02.02.2020