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
для выполнения шага provisioner, который копирует конфигурацию в экземпляр.В вашем случае вы можете использовать что-то вроде следующего:
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 одновременно, а затем файл шаблона может быть сгенерирован, и тогда, наконец, будет запущен шаг provisioner для копирования шаблонной конфигурации.
Помните, что ваше приложение теперь будет запущено за достаточно долгое время до база данных готова, и прежде чем у нее появится доступная конфигурация, убедитесь, что она будет в порядке с повторной попыткой подключения к базе данных (и чтением конфигурации).
В качестве альтернативы вы можете рассмотреть некоторую структуру шаблонов конфигурации, такую какconfd илиConsul Template .