我正在使用云服务(例如 AWS EC2)作为我的开发服务器。这些服务器通常都是大型服务器,我为它们付费。使用它们后,有时我会忘记它们运行了好几天,所以我最终要支付更多费用。
当在 http 端点上发出 http 请求时,如何启动我的实例?“然后”如果在过去 1 小时内没有收到任何请求,我该如何停止我的实例?
请随意分享任何应用程序、服务、代码或设计。
非常感谢
更多细节可以更好地解释问题:
- 当我尝试访问开发环境 URL 时,我希望有一个临时网页(或代理?),上面显示“启动服务器”,然后将我重定向到应用程序。
- 我知道 EC2 中的调度。但如果没有更多请求到达该服务器,我需要自动关闭。而且我可能随时尝试访问我的服务器。
- 我无法考虑设置一个 cron 任务来关机。我需要更好的解决方案,原因与上面的选项相同。
答案1
基本上是两个问题:
- 启动 VPS
- 一个用于关闭它
启动
首先你需要安装ec2 cli tools
,https://aws.amazon.com/cli/
首先,您可以创建自己的服务器作为代理(本地主机)。创建一个可以调用的 php、python 等页面。该页面将打开一个测试页面,如果超时(x 秒),您可以调用 cli ec2 来启动特定实例。
或者,您可以在开发服务器启动后调用 ec2 脚本来启动您的 VPS(例如,我正在使用 Ruby on Rails,一旦我开始开发代码,只需调用一个脚本来启动服务器就非常容易了)
https://boto3.readthedocs.io/en/latest/guide/ec2-example-managing-instances.html
关闭
为了关闭服务器,我会创建一个 cron,在您的每台开发服务器上每 x 分钟(每小时?)运行一次。您基本上会跟踪开发日志的结果并创建一个MD5
,只要 MD5 发生变化,您就知道服务器正在使用。因此,为了使其正常工作,我会花大量时间检查(即不是每分钟)。添加了一封电子邮件,以便在启动关闭时通知您。
假设你的开发日志有时间戳,应该很好。
示例关机脚本
#!/bin/sh
# /etc/cron.hour/autoshutdown
# Example EC2 auto shutdown script
# Place in your /etc/cron.hourly
LOG_FILE=/path/to/my/development.log
MD5_FILE=/tmp/my.log.md5
[email protected]
echo "Create MD5..."
cur_md5=`tail $LOG_FILE | md5`
echo "Read latest MD5..."
if [ -f $MD5_FILE ]; then
last_md5=`cat $MD5_FILE`
else
echo "No MD5 found, 1st time use..."
last_md5='no sig. found'
fi
if [ "$cur_md5" = "$last_md5" ]; then
echo "MD5 signatures are identical, nothing changed we can stop the server..."
echo "Server is been shutdown" | mail -s "Server $(hostname) has been shutdown..." $NOTIFY
# shutdown -h now
else
echo "Current MD5 [$cur_md5]"
echo "Last MD5 [$last_md5]"
echo "MD5 changed, we are still using the sever..."
echo "Updating signature..."
echo $cur_md5 > $MD5_FILE
fi
当然,没有保证,只是我的想法 ;-)