首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有AWS和hotfix部署策略的Terraform

具有AWS和hotfix部署策略的Terraform
EN

Stack Overflow用户
提问于 2018-05-03 09:50:11
回答 1查看 262关注 0票数 5

简而言之,我们有一个由多个应用程序/服务器组成的平台。Terraform用于管理两个AWS基础设施(VPC、子网、IGW、安全组、.)和应用程序部署(利用Ansible作为Terraform的提供者)。对于每个部署封隔器将构建所有的非盟驻苏特派团,标记他们的适当名称,以便从Terraform最新的非盟驻苏特派团将被捡起。

这个过程在一般情况下是可行的,但是当我们想要部署一些小的修补程序时,我们会面临一个两难的境地,这种情况可能会经常发生,就像在每次部署和QA测试之后可能会发生一些回归一样。因此,对于每个需要热修复的应用程序(可能不是所有的应用程序都需要修复),我们创建一个修复分支,构建工件(可以是jar或deb pkg),然后有两种情况:

  • 无论是触发封隔器来构建新的图像,标记它与适当的修补程序和运行地形应用。
  • 或者,运行一个Ansible作业来热部署应用程序包,如果需要,重新启动服务/应用程序。

使用第一种方法,我们保证遵循不变的Infra思想,不幸的是,它也带来了一些负面影响,因为Terraform配置或Infra中的任何小变化都会导致地形计划的改变,例如,我们可能会在安全组中进行一些更改,这是不符合地形状态的(即:它可能来自一些有关白名单的特性),而应用tf将取消所有的更改。建立AMI和运行Terraform的整个过程也相当繁重。

我们更倾向于第二种方法,这很容易,但仍然怀疑这是否是一个好的做法?

EN

回答 1

Stack Overflow用户

发布于 2018-09-05 19:44:26

对于代码更改,我建议使用packer构建AMI作为CI管道的一部分,使用Terraform和ASG管理启动配置更改肯定会很麻烦,但我认为结果比用Ansible更新代码更干净和安全。在技术上,您确实有一个更改的“记录”,因为您知道您的ansible剧本以及它们处于什么状态,但是我认为应该从CI管道中驱动它来构建不可变的工件。

如果你真的想坚持只使用Ansible,你可以一直在你的用户数据中烘焙一本Ansible的剧本,它总是从Master (或者其他什么)获取最新的代码。这确保了新主机能够提供最新的代码,并且可以对现有主机手动调用Ansible。或者,您只需旋转ec2实例来更新代码,方法是将所需容量增加一倍,并在新的功能正常时缩小。这一切都可以高度自动化,并将给您一个伪金丝雀部署。不过,我还是建议坚持使用不可变的构建。

出于好奇你为什么不使用码头?我相信您有一个很好的业务理由,但是迁移到docker也简化了很多工作,因为构建一个码头容器和更新一个ECS任务定义要比部署一个全新的AMI/EC2实例容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50152004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档