我想按需启动一个EC2实例,并在它空闲一段时间(例如,>= 1小时内不进行网络活动)时将其取下来,但我不知道在AWS中这样做的标准方式是什么,因为AWS不支持唤醒局域网。
我打算运行的服务将需要持久的网络连接,例如ssh。
我想要的用户体验如下:
我在这里的动机主要是节约成本。需求将是高度不可预测的(因此计划的实例并不适合),每天可能不到12个活动小时,用户愿意等待几分钟才能启动服务。而且我也不想被锁定为1+年期,并保留实例定价。
我也有一些疯狂的刺痛,我可能如何做到这一点,并将感谢反馈意见,他们是多么合理/明智:
谢谢!
发布于 2016-03-22 14:45:29
Lambda的工作方式有点像这样,但它却让用户在启动应用程序时等待。在Lambda中,您没有一个实例可以管理--所有这些都是在引擎盖下完成的。
我还会检查您是否可以做一些涉及Lambda和Route53故障转移检查的事情,例如,如果实例已经关闭,用户就会点击Lambda,如果它已经打开,用户就会点击Lambda。不过,Lambda可能不需要一个特定的主机头。
或者再次使用R53故障转移来运行保留实例t2.nano来执行“等候室”,然后代理或重定向到另一个实例。
发布于 2016-10-13 19:03:01
您可以在不使用其他服务的情况下这样做:
import boto3
import json
def lambda_handler(event, context):
ec2 = boto3.resource('ec2')
instance = ec2.Instance(event['instance_id'])
if instance.state['Code'] == 16:
# Instance is running, do what you want
elif instance.state['Code'] == 80:
# Instance is stopped, start it
instance.start()
return { 'status': 'instance-unavailable' }
else
# Instance is in another state在这种情况下,instance_id是由参数接收的,但是当然,您可以硬编码它。
https://serverfault.com/questions/765279
复制相似问题