Amazon ec2 EC2 init.d脚本-什么';这是最好的做法

Amazon ec2 EC2 init.d脚本-什么';这是最好的做法,amazon-ec2,autoscaling,Amazon Ec2,Autoscaling,我正在创建一个init.d脚本,该脚本将在实例启动时运行几个任务 它将使用我们的代码存储库创建一个新的卷,如果它还不存在,则装载它 它将标记实例 上述任务的完成对我们的站点至关重要(即,如果没有安装代码库,站点将无法工作)。如何确保服务器最终不会公开可见?我是否应该从ELB中取消注册实例来启动init.d脚本(我甚至不确定它是否会在该点注册),然后在所有任务成功完成后再次注册它? 最佳做法是什么? 谢谢 我建议您改用CloudFormation。您可以通过JSON格式模板表示系统的完整堆栈

我正在创建一个init.d脚本,该脚本将在实例启动时运行几个任务

  • 它将使用我们的代码存储库创建一个新的卷,如果它还不存在,则装载它
  • 它将标记实例
上述任务的完成对我们的站点至关重要(即,如果没有安装代码库,站点将无法工作)。如何确保服务器最终不会公开可见?我是否应该从ELB中取消注册实例来启动init.d脚本(我甚至不确定它是否会在该点注册),然后在所有任务成功完成后再次注册它? 最佳做法是什么?
谢谢

我建议您改用CloudFormation。您可以通过JSON格式模板表示系统的完整堆栈

例如,您可以创建一个自动缩放组,该组具有一个具有唯一标记的实例,并且这些实例附加了另一个卷(可能包含您的代码)

下面是将EBS卷附加到实例的示例JSON模板:

这里还有许多其他JSON模板,您可以使用它们来指导和部署特定的堆栈和应用程序

当然,您可以在实例中使用init.d脚本或使用
rc.local
文件来完成同样的任务,但我相信CloudFormation是一个从外部(而不是从实例内部)获得的更干净的解决方案

您还可以编写自己的脚本,通过“为什么重新发明轮子”从外部启动堆栈


希望这有帮助。

你应该对你的额骨进行健康检查。所以你的服务器不应该进入,除非它报告为高兴。如果启动脚本出错,它不应该报告happy


(另外,您应该考虑使用cloud init。这样您就可以在不创建新AMI的情况下更改启动脚本。)

谢谢,这是brill的建议,但是似乎没有办法使驱动器装载动态化。每次部署时,都会创建新的EBS快照,对于任何新生成的实例,我们需要它们获取最新的快照,而不是硬编码到配置中的快照。