【问题标题】:Build system when using auto scaling group with ELB in aws在 aws 中使用带有 ELB 的 Auto Scaling 组时构建系统
【发布时间】:2018-06-27 22:00:41
【问题描述】:

我使用的是免费层级 aws 帐户,其中有一台 ec2 机器 (Linux)。我有一个简单的网站,后端服务器在 django 上以 8000 端口运行,前端服务器以 Angular 编写并在 http (80) 端口上运行。我使用 nginx 进行 https 并将调用重定向到后端和前端服务器。

现在对于后端构建系统,我完成了这 3 个主要步骤(我通过在同一台机器上运行 jenkins 来自动化这些步骤)。

1) git pull (Pull the latest code from repo).
2) Do migrations (Updating my db with any new table).
3) Restarting the django server. (I was using gunicorn).

现在,我使用 Auto Scaling 组将我的前端和后端服务器分成 2 台不同的机器,我现在使用 ELB(Aws 弹性负载均衡器)来路由请求。我完成了设置。但是现在我在持续部署中遇到了问题。主要的是 ELB 使用自动缩放组,而后者又使用 AMI。

现在,由于 AMI 只创建一次,我的第一个问题是如何自动化此过程并将我的最新代码部署到已经运行的 aws 服务器中。

其次,如果我只想为所有服务器运行几个步骤,例如使用新表更新数据库的第二步,那么如何实现。

如果这些步骤需要在机器上运行,那么我是否需要另一个 ec2 实例来自动执行创建 AMI、使用它更新 Auto Scaling 组然后在其中部署最新代码的过程。

所以,基本上我想知道人们在 AMI 的帮助下在由 Auto Scaling 组创建的 AWS 机器中部署最新代码时遵循的最佳实践。我也使用 bitbucket 进行代码管理。

【问题讨论】:

  • 您看过 AWS CodeDeploy 吗?

标签: django amazon-web-services jenkins deployment continuous-integration


【解决方案1】:

第一个问题:如何自动化“基于包的部署”。

不要为每个版本创建一个新的 AMI,而是创建一个基线 AMI,它仅在您的新版本需要操作系统更改/安全补丁等时才会更改。查看 packer 等工具以自动创建 AMI。为了在代码更改时自动部署代码,您可以使用基于包的部署方法,这意味着您为每个版本创建一个包(应该是您的 CI 流程的一部分),该包存储在一些存储库中,例如 Nexus, Artifactory,甚至是一个简单的 S3 存储桶。 当您部署应用程序的新实例时,它应该运行某种脚本来在实例上提取和解包/安装该包 这可以离线完成。

第二个问题:如何运行其他任务,例如更新数据库架构。

如上所述,这也可以是您的“部署”自动化的一部分,因此如果您使用 Chef 甚至是简单的 bash 脚本,它可以在解压缩新代码之前更新数据库架构,这实际上取决于您的数据库,您如何管理它,以及由谁来协调部署。

例如,您可以有一个 Jenkins 作业,当您推出一个版本时,它会提取新架构并更新您的数据库。

Packer 可以解决您的第三个问题,它可以启动实例、创建 AMI 和终止实例。

详细了解 CICD 和 CICD 相关工具。

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 2018-03-29
    • 2018-07-11
    • 1970-01-01
    • 2018-03-25
    • 2014-04-20
    • 2020-10-05
    • 2017-07-24
    • 2017-07-05
    相关资源
    最近更新 更多