我的组织网站是在前端网络服务器上运行的Django应用程序+ AWS中的一些后台处理服务器。
我们目前正在使用Ansible:
同样的Ansible playbook能够从头开始配置本地Vagrant dev VM或生产EC2实例。
我们现在想在EC2中实现自动缩放,这需要对"treat servers as cattle, not pets"哲学进行一些更改。
第一个先决条件是从静态管理的Ansible清单迁移到动态的,基于EC2 API的清单。
下一个重要问题是如何在这个新世界中进行部署,其中一次性实例出现了。在半夜。我能想到的选择是:
你是怎么做到的?任何见解/最佳实践? 谢谢!
答案 0 :(得分:9)
这个问题非常基于意见。但是为了给你我的看法,我只想用Ansible预先安装AMI,然后使用CloudFormation通过Autoscaling,Monitoring和预先制作的AMI来部署你的堆栈。这样做的好处是,如果您将大部分应用程序堆栈预先烘焙到AMI中,则自动缩放UP
将更快地发生。
Docker是另一种方法,但在我看来,它在您的应用程序中添加了一个额外的层,如果您已经在使用EC2,则可能不需要该层。如果您想在单个服务器中进行容器化,Docker可能非常有用。也许你在服务器上有一些额外的容量,而Docker将允许你在同一台服务器上运行那个额外的应用程序而不会干扰现有的应用程序。
说过有些人发现Docker不是以某种方式优化单个服务器中的资源,而是以某种方式允许您在容器中预先烘焙应用程序。因此,当您部署新版本或新代码时,您只需要在服务器上复制/复制这些docker容器,然后停止旧容器版本并启动新容器版本。
我的两分钱。
答案 1 :(得分:1)
混合解决方案可以为您提供所需的结果。将头码头图像存储在S3中,在启动时使用简单的提取和运行脚本预先烘烤AMI(或将其传递到具有用户数据的库存AMI)。通过将头部图像移动到最新的稳定版本进行版本控制,您还可以通过使fetch脚本足够智能来基于可在实例启动时配置的实例标记来识别要获取的docker版本,从而实现新版本的测试堆栈。
答案 2 :(得分:0)
您还可以将AWS CodeDeploy与AutoScaling和构建服务器一起使用。我们为Jenkins使用CodeDeploy插件。
此设置允许您:
只需按一下按钮即可!
以下是AWS教程:Deploy an Application to an Auto Scaling Group Using AWS CodeDeploy