Terraform: как отделить файловый ресурс от экземпляра и RDS

У меня есть стандартное двухуровневое приложение, которое я развертываю в AWS. В рамках этого развертывания мне нужно записать файл конфигурации в экземпляр EC2. Этот файл конфигурации содержит настройки базы данных (RDS). Прямо сейчас у меня есть этот файл, определенный как поставщик в экземпляре EC2. Итак, что делает terraform, так это то, что он даже не начнет создавать экземпляр EC2, пока RDS не будет на 100% запущен и запущен (что занимает около 5 минут). Это делает вещи очень медленными.

Есть ли способ сделать файловый ресурс вне контекста экземпляра EC2, чтобы экземпляр RDS и экземпляр EC2 создавались параллельно? Или здесь есть другой шаблон, который я должен использовать?

Вот некоторые биты кода:

resource "aws_instance" "foo" {
  ami           = "${lookup(var.AMIS, var.AWS_REGION)}"
  instance_type = "t2.micro"
    //setup the config file
    provisioner "file" {
      destination = "foo/config.json"
      content     = "${data.template_file.config_file.rendered}"
 ...
 }

data "template_file" "config_file" {
  template = "${file("config.json.tmpl")}"
  vars {
    mysql_pass = "${var.MYSQL_PASSWORD}"
    mysql_addr = "${aws_db_instance.mysql.endpoint}"
  }
}


resource "aws_db_instance" "mysql" {
 allocated_storage    = 20
 ...
}

person mfisch    schedule 05.11.2017    source источник


Ответы (1)


Вы можете использовать null_resource для запуска шага подготовки, который копирует конфигурацию в экземпляр.

В вашем случае вы можете использовать что-то вроде следующего:

resource "null_resource" "db_config" {
  # Recreating the instance requires the config to be redeployed
  triggers {
    instance_ids = "${aws_instance.foo.id}"
  }

  connection {
    host = "${aws_instance.cluster.public_ip}"
  }

  provisioner "file" {
      destination = "foo/config.json"
      content     = "${data.template_file.config_file.rendered}"
  }
}

Это позволит одновременно создать экземпляр EC2 и RDS, а затем можно будет сгенерировать файл шаблона, а затем, наконец, будет выполнен шаг поставщика для копирования шаблонной конфигурации.

Помните, что теперь ваше приложение будет запускаться за достаточно долгое время до того, как база данных будет запущена и до того, как ему будет доступна какая-либо конфигурация, поэтому убедитесь, что с повторной попыткой подключения к базе данных (и чтением конфигурации) все будет в порядке.

В качестве альтернативы вы можете рассмотреть некоторую структуру шаблонов конфигурации, такую ​​как confd или Шаблон консула.

person ydaetskcoR    schedule 05.11.2017
comment
Спасибо, такой информации мне не хватает. Я попробую сегодня вечером и отмечу решение. - person mfisch; 06.11.2017