Terraform: переменные в файле tfvar не работают

Я определил переменную map my_role в terraform и установил ее значение в файле abc.tfvar следующим образом. если я назначаю идентификатор учетной записи в качестве фактического значения, это работает, если я устанавливаю идентификатор учетной записи в качестве переменной, это не работает. Означает ли это, что файл tfvar допускает только фактическое значение, а не переменную? Кстати, я использую рабочее пространство Terraform. Поэтому my_role отличается в зависимости от выбранного рабочего пространства.

Следующие работы:

my_role = {
   dev = "arn:aws:iam::123456789012:role/myRole"
   test = ...
   prod = ...
}

Следующее не работает:

my_role = {
   dev = "arn:aws:iam::${lookup(var.aws_account_id, terraform.workspace)}:role/myRole"
   test = ...
   prod = ...
}

Следующее также не работает:

lambdarole = {
   dev = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/myRole"
   test = ...
   prod = ...
}

делает

1 ответ

Вы пытались следовать примеру на входных переменных?

Вы можете определить свой abc.tfvars файл с:

variable "my_role" {
    type = "map"
    default = {
        "dev" = "arn:aws:iam::123456789012:role/myRole"
        "test" = "..."
        "prod" = "..."
    }
}

И получить к нему доступ с "${lookup(var.my_role, terraform.workspace)}",

Кроме того, в соответствии с из файла, переменные, определенные в .tfvars файлы автоматически загружаются, если вы называете файл terraform.tfvarsесли нет, вы должны передать в качестве аргумента -var-file=...

Не могу проверить это прямо сейчас, но, вероятно, что-то в этом роде.

Я отвечаю, когда последняя версия terraform 0.12. Решение простое: вы можете создать один файл, например, vars.tf, и объявить в нем переменные.

Пример - variable "xyz" {}

Теперь создайте terraform.tfvars и инициализируйте его.

Пример - xyz="abcd"

Нет необходимости передавать какие-либо аргументы времени выполнения, он будет выбран напрямую.

Terraform имеет источник данных aws_caller_identity. Вам не нужно нигде указывать или передавать код идентификатора учетной записи. Его можно получить из этого источника.

В любом из ваших файлов.tf просто включите этот источник, а затем вы сможете получить соответствующее значение аргумента.

Вот как это можно сделать. Определите это в любом *.tf файле

data "aws_caller_identity" "current" {}

Теперь, когда вам нужно значение arn или идентификатора учетной записи, его можно получить, используя:

Для идентификатора аккаунта (для terraform0.12):

data.aws_caller_identity.current.account_id

В вашем случае это будет так:

dev = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/myRole"

Но для того, чтобы это работало, вам необходимо определить источник данных, как показано выше, в любом файле *.tf.

Для получения дополнительной помощи обратитесь к следующему:

URL: https://www.terraform.io/docs/providers/aws/d/caller_identity.html

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