我想按需启动一个EC2实例,并在闲置一段时间(例如,没有networking活动时间大于1小时)时将其closures,但我不能说出一个标准的方式在AWS中这样做看起来像,因为AWS不支持唤醒LAN。
我打算运行的服务将需要持久的networking连接,例如ssh。
我所瞄准的用户体验如下所示:
我的动机主要是节约成本。 这种需求将是非常难以预测的(所以计划的实例并不适合),可能不到12小时/天,而且用户愿意等待几分钟才能启动服务。 而且我不想用保留的实例定价来locking1年以上的期限。
我也有一些野蛮刺我怎么可能做到这一点,并会感谢他们是多么合理/明智的反馈:
谢谢!
Lambda的工作原理与此类似,不过相反,它使用户在启动应用程序时等待。 在Lambda中,虽然你没有一个实例可以pipe理,但全部都是在引擎盖下完成的。
我还会检查是否可以执行一些涉及Lambda和Route53故障转移检查的操作,例如,如果实例closures,则用户命中Lambda,如果实例closures,则打开实例。 这可能不适用于Lambda需要一个特定的主机头。
或者再次使用R53故障转移来运行保留实例t2.nano来执行“等待室”,然后代理或重新定向到另一个实例。
你可以做这样的事情,而不需要其他服务:
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由参数接收,但是当然可以对其进行硬编码。