#terraform
#terraform
Вопрос:
У меня есть скрипт, который мне нужно запустить после того, как мой экземпляр будет подготовлен и тома будут подключены:
resource "aws_instance" "controller" {
...
provisioner "remote-exec" {
connection {
type = "ssh"
user = "centos"
}
inline = [
"download and run script to verify environment"
]
}
}
resource "aws_ebs_volume" "controller-ebs-sdb" {
...
}
resource "aws_volume_attachment" "controller-volume-attachment-sdb" {
device_name = "/dev/sdb"
volume_id = "${aws_ebs_volume.controller-ebs-sdb.id}"
instance_id = "${aws_instance.controller.id}"
}
В настоящее время скрипт не работает в среде, потому что при его запуске том не был присоединен.
Возможно ли запускать скрипт remote-exec только после подключения томов?
Ответ №1:
Вы можете запустить provisioner на любом ресурсе (рассмотрим null_resource
шаблон для экстремальной версии этого), поэтому лучше всего здесь запустить его на aws_volume_attachment
ресурсе:
# ...
resource "aws_volume_attachment" "controller-volume-attachment-sdb" {
device_name = "/dev/sdb"
volume_id = "${aws_ebs_volume.controller-ebs-sdb.id}"
instance_id = "${aws_instance.controller.id}"
provisioner "remote-exec" {
connection {
host = "${aws_instance.controller.public_ip}"
type = "ssh"
user = "centos"
}
inline = [
"download and run script to verify environment"
]
}
}
Ответ №2:
Вы можете рассмотреть возможность добавления опции запуска в remote-exec. Другой грубый вариант — добавить режим ожидания на несколько секунд, или скрипт может повторить попытку сам, или проверить состояние / существование диска, а затем попытаться.