Невозможно запустить инстансы EC2 асинхронно через Terraform - PullRequest
1 голос
/ 19 июня 2020

Я готов запустить два экземпляра через Terraform. Сначала будет сгенерировано несколько файлов сертификатов, pu sh to S3 bucket. Второй экземпляр извлечет эти сертификаты из определенной корзины S3. Обе операции будут обрабатываться пользовательскими данными. Проблема здесь в том, что команды pull (aws cli) в пользовательских данных второго экземпляра не работают. (Он работает, когда я пытаюсь использовать оболочку). Я думаю, что проблема в том, что terraform запускает оба экземпляра синхронно, так что второй экземпляр запускается до того, как первый экземпляр подталкивает сертификаты к S3.

Я также пытался справиться с этим, добавив в свой код "depends_on", но это не сработало. Я ищу способ запускать экземпляры асинхронно. Как будто второй экземпляр будет запущен через 30 секунд, затем будет запущен первый экземпляр. Здесь я вставляю соответствующую часть кода.

data "template_file" "first_executor" {
  template = file("some_path/first_executor.sh")
}

resource "aws_instance" "first_instance" {
  ami = data.aws_ami.amazon-linux-2.id
  instance_type = "t2.micro"
  user_data = data.template_file.first_executor.rendered
  network_interface {
    device_index = 0
    network_interface_id = aws_network_interface.first_instance-network-interface.id
  }
}

###

data "template_file" "second_executor" {
  template = file("some_path/second_executor.sh")
}

resource "aws_instance" "second_instance" {
  depends_on = [aws_instance.first_instance]
  ami = data.aws_ami.amazon-linux-2.id
  instance_type = "t2.micro"
  user_data = data.template_file.second_executor.rendered
  network_interface {
    device_index = 0
    network_interface_id = aws_network_interface.second-network-interface.id
  }
}

1 Ответ

1 голос
/ 19 июня 2020

Ответ: нет. "depends_on" в Terraform означает, что он будет ждать, пока ресурс будет доступен. Это означает, что ваш второй EC2 будет создан, как только будет запущен первый EC2.

Terraform не будет ждать, пока ваш первый EC2 не перейдет в состояние «работает» или если данные пользователя будут выполнены.

Я бы предложил go с depdens_on, а затем во втором сценарии пользовательских данных EC2 добавить несколько logi c, чтобы иметь al oop, который будет искать S3 и будет ждать и повторять, пока ресурсы не будут найдены.

...