我正在尝试为项目设置以下内容
我对EC2实例所基于的AMI有疑问。如果我想对系统进行一些更改'配置(比如更新 libssl 包),我看到两个选项:
最好的方法是什么(避免停机)?我应该坚持一些最佳实践吗?
由于
[编辑] 我来自aws-missing-tools的aws-ha-release,它可以从自动缩放组重启所有实例而不会出现任何停机。我想这可以与packer一起使用来强制运行实例使用新的AMI。对此有何反馈?我觉得它有点像hacky。
答案 0 :(得分:2)
以下是一些选项:
如果您在部署新代码时试图阻止停机,请利用 ELB可以有多个自动缩放组/启动配置这一事实。
你可以:
表示代码的版本X , B 表示版本X + 1 (包括任何更改) O / S配置,例如 libssl )
现在,当你想推出代码版本X + 1时,简单的"烘烤"一个新的AMI,准确配置你喜欢它,并将自动缩放组B添加到elb。自动缩放组及其实例投入使用后,将自动缩放组A的最大/容量设置为0,将版本X服务器从ELB中取出。只运行您的X + 1版本。当新的实例在未来出现时,例如如果服务器出现故障,他们将使用您的X + 1 AMI并进行所有配置更改。
请注意,如果您的应用程序与数据库通信,则需要确保代码的版本X和版本X + 1可以在相同版本的数据库上运行,例如如果版本X + 1删除了版本X使用的表格,那么您将从用户点击您的应用程序的Verison X时收到错误。当您的代码版本中没有数据库更改,或者当您推出新版本的代码时,如果您具有向后兼容性,则#1可以正常工作。
如果你想做的就是更新O / S,例如修补一个版本,然后你可以结合使用像Ansible这样的工具和ELB健康检查的想法。
关于速度的说明
选项1 将允许失败的实例在服务中比选项2更快(因为您没有等待Ansible运行),代价是不得不预先执行烤"你的AMI。
选项2 将为您提供更大的灵活性和速度来修补生产服务器,例如如果您需要修补现在"这可能是最快捷的方式。有一些像Ansible运行的东西和修补O / S(将该任务与部署代码任务分开)的能力可以带来额外的优势,具体取决于您的用例。在服务器的配置(库,用户管理等)中提供无代理挂钩非常强大,尤其是在云中。
答案 1 :(得分:-1)
为什么不评估使用启动配置的userdata字段?
总而言之,它是16 KB的纯爱,内置于您生产新机器的食谱中。
如果使用Linux,则使用Bash脚本,如果是WIndows,则可以使用Powershell。
没有其他工具,所有工具都是免费的。
P.S。如果您需要超过16 KB,只需在核心脚本中链接其他脚本的wget,然后通过创建链来对其进行shell。