首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从网络请求自动启动AWS EC2实例(唤醒局域网)

从网络请求自动启动AWS EC2实例(唤醒局域网)
EN

Server Fault用户
提问于 2016-03-22 11:31:21
回答 2查看 5.6K关注 0票数 5

我想按需启动一个EC2实例,并在它空闲一段时间(例如,>= 1小时内不进行网络活动)时将其取下来,但我不知道在AWS中这样做的标准方式是什么,因为AWS不支持唤醒局域网。

我打算运行的服务将需要持久的网络连接,例如ssh。

我想要的用户体验如下:

  • 如果当用户尝试连接时,服务已经启动,则用户可以立即访问该服务。
  • 如果当用户尝试连接时服务被关闭,用户将收到一个“服务正在启动”的回复(并且连接被关闭)。用户在几分钟后重试并成功连接(如果他太早重新尝试,则再次收到“启动”消息)。在最后一个用户断开连接后,该服务将持续一个小时。

我在这里的动机主要是节约成本。需求将是高度不可预测的(因此计划的实例并不适合),每天可能不到12个活动小时,用户愿意等待几分钟才能启动服务。而且我也不想被锁定为1+年期,并保留实例定价。

我也有一些疯狂的刺痛,我可能如何做到这一点,并将感谢反馈意见,他们是多么合理/明智:

  1. 使用自动缩放组,将服务从0“缩放”到最多为1个实例。但是,如果没有实例运行,我不知道如何才能发出“服务正在启动”的回复。
  2. 运行t2.当服务关闭时运行一个微实例,其唯一目的是捕捉连接尝试,发出“启动”应答,触发实际服务实例的启动,然后死亡。当服务实例由于不活动而下降时,它将需要再次启动t2。

谢谢!

EN

回答 2

Server Fault用户

回答已采纳

发布于 2016-03-22 14:45:29

Lambda的工作方式有点像这样,但它却让用户在启动应用程序时等待。在Lambda中,您没有一个实例可以管理--所有这些都是在引擎盖下完成的。

我还会检查您是否可以做一些涉及Lambda和Route53故障转移检查的事情,例如,如果实例已经关闭,用户就会点击Lambda,如果它已经打开,用户就会点击Lambda。不过,Lambda可能不需要一个特定的主机头。

或者再次使用R53故障转移来运行保留实例t2.nano来执行“等候室”,然后代理或重定向到另一个实例。

票数 4
EN

Server Fault用户

发布于 2016-10-13 19:03:01

您可以在不使用其他服务的情况下这样做:

代码语言:javascript
复制
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是由参数接收的,但是当然,您可以硬编码它。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/765279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档