2016-12-08 3 views
-1

Я объявил все мои переменные внутри одного файла variables.tf.Могу ли я использовать более одного файла variables.tf в Terraform?

Но я хочу, чтобы идентификаторы AWS AMI были динамически.

Итак, я пытаюсь создать второй файл variables.tf (variables-amis.tf) динамически с помощью скрипта Python, который использует Boto для извлечения последних идентификаторов AMI на основе тега имени.

Как я уже прочитал в документации, Terraform будет использовать каждый файл .tf, который найдет в рабочем пути.

Могу ли я разбить файл переменных на более мелкие?

Я чем-то переделал? Есть простой и элегантный способ?

ответ

2

Terraform объединит все файлы .tf в папке вместе, да, вы можете просто иметь переменные, определенные в других файлах.

Следует иметь в виду, что с 0.7 Terraform будет ошибочно, если переменная определена в нескольких файлах в рабочей папке.

Так что, если у вас что-то вроде этого:

terraform 
├── configuration.tf 
├── main.tf 
└── variables.tf 

И содержал variables.tf:

variable "foo" { default = "foo" } 
variable "bar" { default = "bar" } 

и configuration.tf содержала:

variable "foo" { default = "bar" } 

Это может привести к терраформировать потому что переменная foo определена дважды.

В вашей конкретной ситуации, однако, вместо написания сценария Python для поиска AMI на основе тега вам может быть полезно использовать aws_ami data source.

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

Краткий пример (из Terraform-х aws_instance docs) будет что-то вроде этого:

data "aws_ami" "ubuntu" { 
    most_recent = true 
    filter { 
    name = "name" 
    values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"] 
    } 
    filter { 
    name = "virtualization-type" 
    values = ["hvm"] 
    } 
    owners = ["099720109477"] # Canonical 
} 

resource "aws_instance" "web" { 
    ami = "${data.aws_ami.ubuntu.id}" 
    instance_type = "t2.micro" 
    tags { 
     Name = "HelloWorld" 
    } 
} 

Это идет и находит AMI издаваемый 099720109477 счета (каноническому) и имеет тип виртуализации hvm и имя начиная с ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*, чтобы вытащить последнее официальное изображение 14.04. Затем он принимает этот AMI и использует его для создания экземпляра с ним.

+0

Спасибо, я действительно пропустил это в документации! –

Смежные вопросы