Файл конфигурации Terraform: использование переменной внутри переменной - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь создать файл конфигурации terraform для создания экземпляра ec2. Я использую файл variables.tf, чтобы поместить все мои переменные. Это работает для большинства случаев, но есть два случая, которых я не могу достичь. Любые указатели очень ценятся.

1.using переменной для имени экземпляра aws. Использование var.service_name или "${service_name}" не работает.

    resource "aws_instance" var.service_name {
       ami           = "ami-010fae13a16763bb4"
       instance_type = "t2.micro"
        .....
    }

Эта запись объясняет, что имя ресурса не может быть переменным. Но это довольно старый. Не уверен, что это все еще так.

2.Использование переменной внутри другой переменной. Например, у меня есть параметры подключения, определенные следующим образом:

connection {
           host = "${aws_instance.terraformtest.public_ip}"
           type     = "ssh"
           user     = "ec2-user"
           private_key = "${file("C:/Users/phani/Downloads/microservices.pem")}"
}

Это работает. Я использую IP, сгенерированный из ресурса экземпляра aws. Но если я использую это так. Это не работает

host = "${aws_instance.${service_name}.public_ip}" 

Я что-то упустил или есть обходной путь

1 Ответ

0 голосов
/ 07 ноября 2019

Имена ресурсов в Terraform должны быть константами. На практике это обычно не является проблемой, потому что имя ресурса должно быть уникальным только в данном модуле, и поэтому вызывающей программе не нужно настраивать имя ресурса в дочернем модуле. В случае, когда конкретный ресурс является первичным объектом, объявленным модулем, общая идиома состоит в том, чтобы называть ресурс «основным», например resource "aws_instance" "main".

В ситуациях, когда вам необходимо объявить несколько экземпляров, определения которыхДля использования общей конфигурации вы можете использовать for_each или count для создания нескольких экземпляров из одного и того же блока ресурсов. В этом случае адреса ресурсов включают в себя дополнительный компонент «индекс», например aws_instance.example["foo"] или aws_instance.example[0], где index может быть переменной для динамического выбора одного из экземпляров, созданных одним блоком ресурса. .

...