Terraform: как отделить файловый ресурс от экземпляра и RDS
У меня есть стандартное 2-уровневое приложение, которое я развертываю на 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
...
}
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 или Consul Template.