【问题标题】:Preventing services from starting automatically on EC2 Backup Instance防止服务在 EC2 备份实例上自动启动
【发布时间】:2016-05-25 05:17:24
【问题描述】:

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

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

我认为的一种解决方法是将所有服务设置为“手动”启动模式(相对于“自动”)。然后创建 AMI。我想这会奏效。但这也意味着在服务器重新启动时,我需要手动启动服务(很痛苦)。

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

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

还有其他人有什么建议吗?

谢谢。

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

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

    sc config ServiceName start= disabled
    

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


    最好的办法是完全回避这个问题。我怀疑这种“hot-but-actually-not”备份风格的价值;如果您在故障期间没有手动干预,则必须编写一些自动化程序来处理服务启动、切换环境等。这还不包括启动 40 个 Windows 服务所需的时间。关于您的替代建议,在切换期间更改安全组或安全组规则会使这进一步复杂化。

    只需将您的生产实例放置在最小/最大/所需大小为 1 的 AutoScaling Group 中,您可能会得到更好的服务,其中 ELB health check 可以指向您实例上的任何服务端点。例如,您可以将其指向服务,然后检查同一框上所有其他服务的状态并返回 HTTP 200。如果您当前运行的实例发生任何导致运行状况检查失败并在ELB,将启动一个基于您的备份 AMI 的新实例。

    您采用的 AMI 将用于启动配置,以便在发生故障时启动的任何新实例都来自备份。您可以根据较新的 AMI 定期创建新的启动配置(当您添加更多服务、执行 Windows 更新等时)并将它们交换到 AutoScaling 组中,而不会影响当前运行的实例。

    【讨论】:

    • 谢谢。这是我采用的方法:1)运行脚本以使用 scconfig 将我的所有服务的启动模式更改为“手动”。 2)创建图像。 3) 运行脚本将它们改回自动。
    最近更新 更多