Я использовал Terragrunt, чтобы организовать создание нестандартного AWS VPC. У меня есть управление состоянием S3 / DynamoDB, а код VPC - это модуль. У меня есть код terraform.tfvars
среды VPC, проверенный во втором репо в соответствии с terragrunt
README.md.
Я создал второй модуль, который в конечном итоге создаст хосты в этом VPC, но пока просто нацелен на вывод его идентификатора. Я создал отдельную «среду хостов» / terraform.tfvars
для создания экземпляра этого модуля.
- Я запускаю
terragrunt apply
в каталоге среды VPC - VPC создан - Я запускаю
terragrunt apply
второй раз в каталоге среды хостов - директива вывода не работает (ошибки нет, но неверно, см. Ниже).
Это предшествует тому, чтобы однажды запустить terragrunt apply-all
в родительском каталоге каталогов среды VPC / hosts; при чтении документов я предлагаю использовать terraform_remote_state
источник данных для отображения идентификатора VPC, поэтому я указал такой доступ в data.tf
файле модуля hosts:
data "terraform_remote_state" "vpc" {
backend = "s3"
config {
bucket = "myBucket"
key = "keyToMy/vpcEnvironment.tfstate"
region = "stateRegion"
}
}
Затем в модуле outputs.tf
hosts я указал вывод для проверки назначения:
output "mon_vpc" {
value = "${data.terraform_remote_state.vpc.id}"
}
Когда я запускаю (2) выше, он выходит с:
Заявка завершена! Ресурсы: 0 добавлено, 0 изменено, 0 уничтожено.
Выходы:
mon_vpc = 2018-06-02 23:14: 42.958848954 +0000 UTC
Вопросов:
Я ошибаюсь, настраивая код так, чтобы среда хостов была настроена для правильного получения идентификатора VPC из уже существующего VPC (файл состояния терраформирования) - любой совет о том, что здесь изменить, будет оценен.
Похоже, мне удалось получить дату создания VPC, а не его идентификатор, что, учитывая код, вызывает недоумение - кто-нибудь знает, почему?
Модули сообщества не использую - все ручная работа.
РЕДАКТИРОВАТЬ: В ответ Брэндону Миллеру, вот немного больше. В моем модуле VPC у меня есть outputs.tf, содержащий среди других выходов:
output "aws_vpc.mv.id-op" {
value = "${aws_vpc.mv.id}"
}
а vpc.tf содержит
resource "aws_vpc" "mv" {
cidr_block = "${var.vpcCidr}"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "mv-vpc-${var.aws_region}"
}
}
Поскольку этот cfg приводит к созданию vpc, и поскольку большинство параметров <computed>
, я предположил, что состояние будет содержать достаточно данных, чтобы другие модули могли ссылаться на него, консультируясь с состоянием (сначала я предположил, что terraform использует API AWS для этого под капота, вместо того, чтобы обращаться к другому ключу состояния).
РЕДАКТИРОВАТЬ 2: сначала прочтите весь ответ @ brendan-miller и следующие комментарии. Использование точек вызывает проблему, так как сбивает с толку терраформ (см. Ответ Брендана о формате спецификации ниже):
Error: output 'mon_vpc': unknown resource 'data.aws_vpc.mv-ds' referenced in variable data.aws_vpc.mv-ds.vpc.id