Я не слишком уверен в том, что ваше требование о том, чтобы производственная среда зависела от среды разработки, но оставляя в стороне конкретные особенности, идиоматическим способом создания последовательности между ресурсами и между модулями в Terraform является использование ссылочных выражений.
Вы не сказали, какой аспект среды разработки используется производственной средой, но для примера скажем, что производственной среде нужен идентификатор VPC, созданного в среде разработки. В этом случае модуль разработки будет экспортировать этот идентификатор VPC в качестве выходного значения:
# (this goes within a file in your mymod/dev directory)
output "vpc_id" {
value = "${aws_vpc.example.id}"
}
Тогда ваш производственный модуль, наоборот, будет иметь входную переменную для указания этого:
# (this goes within a file in your mymod2/prod directory)
variable "vpc_id" {
type = "string"
}
После установки ваш родительский модуль может передать значение между ними, чтобы установить искомую зависимость:
module "dev" {
source = "./mymod/dev"
}
module "prod" {
source = "./mymod2/prod"
vpc_id = "${module.dev.vpc_id}"
}
Это работает, потому что создает следующую цепочку зависимостей:
module.prod's input variable vpc_id depends on
module.dev's output value vpc_id, which depends on
module.dev's aws_vpc.example resource
Затем вы можете использовать var.vpc_id
в любом месте вашего производственного модуля для получения этого идентификатора VPC, который создает другую ссылку в этой цепочке зависимостей, сообщая Terraform, что он должен дождаться создания VPC, прежде чем предпринимать какие-либо действия, зависящие от VPC. существовать.
В частности, обратите внимание, что в цепочке зависимостей участвуют отдельные переменные и выходные данные, а не модуль в целом. Это означает, что если у вас есть какие-либо ресурсы в модуле prod, которые не не нуждаются в существовании VPC, то Terraform может приступить к их немедленному созданию, не дожидаясь полного завершения модуля разработки, пока все еще гарантируя, что создание VPC завершено, прежде чем предпринимать какие-либо действия, которые делают , это необходимо.
Дополнительная информация по этому шаблону приведена в разделе документации Состав модуля . Он написан с учетом синтаксиса и возможностей Terraform v0.12, но общий шаблон все еще применим к более ранним версиям, если вы вместо этого выражаете его с использованием синтаксиса и возможностей v0.11, как я делал в примерах выше.