EC2 init.d脚本 - 什么是最佳实践

时间:2014-02-07 18:28:32

标签: amazon-ec2 autoscaling

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

  • 它将使用我们的代码存储库创建一个新卷,如果它尚不存在则挂载它。
  • 它会标记实例

上述任务完成对我们的网站至关重要(即,如果没有安装代码库,该网站将无法运行)。如何确保服务器最终不会公开显示?我是否应该从ELB中取消注册实例来启动我的init.d脚本(我甚至不确定它是否会在那时注册),然后在所有任务成功完成后再次注册它? 什么是最佳做法? 谢谢!

2 个答案:

答案 0 :(得分:1)

我建议你改用CloudFormation。您可以通过在JSON格式模板中表示系统来调出整个系统堆栈。

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

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

https://s3.amazonaws.com/cloudformation-templates-us-east-1/EC2WithEBSSample.template

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

http://aws.amazon.com/cloudformation/aws-cloudformation-templates/

当然,您可以使用init.d脚本或在您的实例中使用rc.local文件来完成相同的操作,但我相信CloudFormation是一个来自外部(不在您的实例中)的更清晰的解决方案

您还可以编写自己的脚本,从外部调出堆栈,以重新发明轮子。

希望这有帮助。

答案 1 :(得分:1)

您应该对您的ELB进行健康检查。因此,除非报告为满意,否则您的服务器不应该进入。如果启动脚本错误,它不应该报告。

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