防止服务在EC2备份实例上自动启动

时间:2016-05-24 20:01:21

标签: amazon-web-services amazon-ec2

我有一个Windows EC2实例。我想在不同的可用区域中创建备份实例。我发现了很多文章解释了这是如何完成的(即创建AMI并在新的可用区域中启动)。

我的实例运行大约40个Windows服务。其中许多服务查询各种数据源并发送通知(SMS消息,电子邮件,移动设备通知)。我担心的是当我启动我的"备份实例"它可以开始发送我的生产服务器已发送的消息。所以我正在寻找一些方法来在启动备份服务器时禁用服务。

我认为一种解决方法是将所有服务设置为"手册"启动模式(vs."自动")。然后创建AMI。我想这会奏效。但是,这也意味着在服务器重启时我需要去手动启动服务(痛苦)。

另一个是修改安全组,基本上关闭除远程桌面之外的所有连接。这样服务可以启动,但是他们无法发送通知。

是否可以配置一个安全组,以便它可以用互联网做的基本上就是远程桌面?

还有其他人有建议吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以通过sc config轻松自动停用服务:

sc config ServiceName start= disabled

在同一个脚本中,您可以使用AWS Tools for PowerShell通过New-EC2Image创建AMI。然后,您可以轮询映像状态直到它完成,然后将服务设置回用于创建AMI的实例上的start = auto

最好的途径是完全回避这个问题。我怀疑这种“热但实际上不是”的备份方式的价值;如果您在故障期间没有手动干预,则必须编写一些自动化来处理服务启动,切换环境等。这不计算启动40个Windows服务所需的时间。关于您的备用建议,在转换期间更改安全组或安全组规则会使情况更加复杂。

只需将生产实例放在最小/最大/所需大小为AutoScaling Group的{/ 3}}中,然后使用ELB health check指向您实例上的任何服务端点,即可获得更好的服务。例如,您可以将其指向服务,然后检查同一个框上的所有其他服务的状态并返回HTTP 200.如果您当前正在运行的实例发生任何导致运行状况检查失败并在服务器上停止运行的情况。 ELB是一个基于备份AMI的新实例。

您采用的AMI将用于启动配置,以便在发生故障时旋转的所有新实例都来自备份。您可以定期基于较新的AMI创建新的启动配置(当您添加更多服务,执行Windows更新等...)并将这些配置交换到AutoScaling组,而不会影响当前正在运行的实例。