Попросили ввести значения для переменных, установленных в модуле terraform, используя terragrunt - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть проект terragrunt со следующей структурой:

|---terraform.tfvars
|---account
|   |---us-east-1
|       |---nonprod
|           |---s3
|               |---terraform.tfvars
|---modules
|   |---s3
|       |---main.tf
|---source
    |---s3
        |---main.tf
        |---provider.tf
        |---vars.tf

/ account / us-east-1 / nonprod / s3 / terraform.tvars

terragrunt = {
  terraform {
    source = "../../../../modules/s3"
  }

  include {
    path = "${find_in_parent_folders()}"
  }
}

/ modules /s3 / main.tf

module "s3" {
    source = "../../source/s3"

    app-name = "example-app"
    aws-region = "us-east-1"
    bucket-name = "example-app-bucket"
}

/ source / s3 / main.tf

resource "aws_s3_bucket" "s3" {
  region        = "${var.aws-region}"
  bucket        = "${var.bucket-name}"
  acl           = "private"
  force_destroy = "true"

  tags {
    Name        = "${var.app-name}"
  }
}

Когда я запускаю terragrunt из каталога account:

$ terragrunt plan-all --terragrunt-source ../../../../source

Меня просят ввести значения для переменных, которые я установил в /modules/s3/main.tf

var.app-name
  Enter a value:

Однако, когда я запускаю terraform plan из каталога modules/s3, похоже, он работает.

Что не так с этой настройкой при использовании террагранта?

1 Ответ

0 голосов
/ 30 сентября 2018

Я считаю, что путаница, которая приводит к проблеме, заключается в наименовании вещей.то есть source/s3 - это действительно TF модуль , а modules/s3 - это код TF, который вызывает (использует) модуль.

terragrunt ожидает найти источник модуля в конфигурации, а не код TF, который вызывает модуль.

Попробуйте это в terraform.tfvars:

terragrunt = {
  terraform {
    source = "../../../../source/s3"
  }

  # ... other code & configs ...

}

НТН!

...