Terragrunt v0.14.9, Terraform v0.11.7 считывает идентификатор AWS VPC из второй среды

Я использовал Terragrunt для организации создания AWC VPC не по умолчанию. У меня есть состояние S3/DynamoDB mgmt, а код VPC - это модуль. У меня есть "среда VPC" terraform.tfvars код проверен во втором репо согласно terragrunt README.md.

Я создал второй модуль, который в конечном итоге будет создавать хосты в этом VPC, но пока просто нацелен на вывод его идентификатора. Я создал отдельную "среду хостов" / terraform.tfvars для реализации этого модуля.

  1. я бегу terragrunt apply в каталоге среды VPC - VPC создан
  2. я бегу terragrunt apply второй раз в директории среды hosts - директива output не работает (без ошибок, но неверно, см. ниже).

Это предшественник одного дня бега 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"
    }
}

Затем в модуле hostsoutputs.tfЯ указал выход для проверки присваивания:

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

Вопросы:

  1. Я ошибаюсь, настраивая код так, чтобы среда хостов была настроена для правильного получения идентификатора VPC из уже существующего VPC (файла состояния terraform) - любой совет о том, что изменить здесь, будет оценен.

  2. Похоже, мне удалось узнать дату создания VPC, а не его ID, что, учитывая код, вызывает недоумение - кто-нибудь знает почему?

Я не пользуюсь модулями сообщества - все раскатано вручную.

РЕДАКТИРОВАТЬ: В ответ на Брэндон Миллер, здесь немного больше. В моем модуле VPC у меня есть файл output.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 использовал для этого AWS API под капотом, а не обращался к другому ключу состояния).

РЕДАКТИРОВАТЬ 2: Сначала прочитайте все ответы @brendan-miller и последующие комментарии. Использование точек вызывает проблему, так как это приводит к путанице в терраформе (см. Ответ Брендана для формата спецификации ниже):

Error: output 'mon_vpc': unknown resource 'data.aws_vpc.mv-ds' referenced in variable data.aws_vpc.mv-ds.vpc.id

1 ответ

Решение

Вы назвали свой вывод aws_vpc.mv.id-op но когда вы получаете его, вы получаете только id, Вы могли бы попробовать

data.terraform_remote_state.vpc.aws_vpc.mv.id

но я не уверен, что Terraform будет жаловаться на дополнительные ., Однако формат всегда должен быть

data.terraform_remote_state.<name of the remote state module>.<name of the output>

Вы упомянули, что хотите получить эту информацию с помощью API AWS. Это также возможно с помощью aws_vpc источник данных. В их примере используется идентификатор, но вы также можете использовать любой тег, который вы использовали на своем виртуальном частном сервере.

Как это:

data "aws_vpc" "default" {
  filter {
    name   = "tag:Name"
    values = ["example-vpc-name"]
  }
}

Тогда вы можете использовать это для идентификатора

${data.aws_vpc.default.id}

Кроме того, это извлекает все установленные теги, например:

${data.aws_vpc.default.tags.Name}

И блок CIDR

${data.aws_vpc.default.cidr_block}

А также некоторая другая информация. Это может быть очень полезно для хранения и получения информации о вашем VPC.

Другие вопросы по тегам