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