我正在使用Terraform v0.11.7和AWS提供程序1.30来构建环境,以运行基于Debian 9.5 AMI构建的locust的负载测试。
我的模块公开了一个num_instances
变量,用于确定所使用的蝗虫命令行。下面是我的配置。
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
脚本,但它似乎没有运行,因为我没有看到{{1} }文件和nohup.out
不在我的运行进程中。如果我在该主机上手动运行相同的locust
脚本,该服务将启动,并且我可以断开与主机的连接并仍然可以访问它。 sh /home/admin/start.sh
主机上也出现相同的问题。
是什么导致aws_instance user_data中的locust_slave
运行失败?在user_data中执行脚本时,我应该注意哪些陷阱?
非常感谢!
答案 0 :(得分:0)
感谢小费!我不知道该日志文件,但确实指出了该文件。这是一个相对路径问题。我假设user_data
命令将以/home/admin
作为工作目录执行,因此locust
找不到locustfile.py
文件。使用到locustfile.py
的绝对路径解决了这个问题。