Почему может произойти сбой команды nohup в Terraform aws_instance user_data не запускается при запуске экземпляра

Я использую Terraform v0.11.7 и AWS provider 1.30 для создания среды для запуска нагрузочных тестов с locust, построенной на Debian. 9.5 AMI.

Мой модуль предоставляет num_instances var, используемый для определения используемой командной строки locust. Ниже моя конфигурация.

resource "aws_instance" "locust_master" {
  count                   = 1

  ami                     = "${var.instance_ami}"
  instance_type           = "${var.instance_type}"
  key_name                = "${var.instance_ssh_key}"
  subnet_id               = "${var.subnet}"
  tags                    = "${local.tags}"
  vpc_security_group_ids  = ["${local.vpc_security_group_ids}"]

  user_data = <<-EOF
              #!/bin/bash
              # Install pip on instance.
              curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
              sudo python3 get-pip.py
              rm get-pip.py
              # Install locust and pyzmq on instance.
              sudo pip3 install locustio pyzmq
              # Write locustfile to instance.
              echo "${data.local_file.locustfile.content}" > ${local.locustfile_py}
              # Write locust start script to instance.
              echo "nohup ${var.num_instances > 1 ? local.locust_master_cmd : local.locust_base_cmd} &" > ${local.start_sh}
              # Start locust.
              sh ${local.start_sh}
              EOF
}

resource "aws_instance" "locust_slave" {
  count                   = "${var.num_instances - 1}"

  ami                     = "${var.instance_ami}"
  instance_type           = "${var.instance_type}"
  key_name                = "${var.instance_ssh_key}"
  subnet_id               = "${var.subnet}"
  tags                    = "${local.tags}"
  vpc_security_group_ids  = ["${local.vpc_security_group_ids}"]

  user_data = <<-EOF
              #!/bin/bash
              set -x
              # Install pip on instance.
              curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
              sudo python3 get-pip.py
              rm get-pip.py
              # Install locust and pyzmq on instance.
              sudo pip3 install locustio pyzmq
              # Write locustfile to instance.
              echo "${data.local_file.locustfile.content}" > ${local.locustfile_py}
              # Write locust master dns name to instance.
              echo ${aws_instance.locust_master.private_dns} > ${local.locust_master_host_file}
              # Write locust start script to instance.
              echo "nohup ${local.locust_slave_cmd} &" > ${local.start_sh}
              # Start locust.
              sh ${local.start_sh}
              EOF
}

Если я подключаюсь по SSH к экземпляру locust_master после его запуска, я вижу сценарий /home/admin/start.sh, но он не запускается, так как я не вижу файл nohup.out и locust не входит в мои запущенные процессы. Если я вручную запустил тот же сценарий sh /home/admin/start.sh на этом хосте, служба запустится, и я смогу отключиться от хоста и по-прежнему получить к нему доступ. Та же проблема проявляется на locust_slave хосте (ах).

Что может привести к сбою запуска start.sh в aws_instance user_data? Есть ли какие-то ошибки, о которых я должен знать при выполнении скриптов в user_data?

Спасибо заранее!


person Allen Gooch    schedule 08.08.2018    source источник
comment
Есть ли в этом /var/log/cloud-init-output.log что-нибудь полезное?   -  person ydaetskcoR    schedule 09.08.2018


Ответы (1)


Спасибо за совет! Я не знал об этом файле журнала, и он указывал на него. Это был вопрос относительного пути. Я предполагал, что команды user_data будут выполняться с /home/admin в качестве рабочего каталога, поэтому locust не смог найти файл locustfile.py. Использование абсолютного пути к locustfile.py решило проблему.

person Allen Gooch    schedule 09.08.2018