【发布时间】:2017-12-28 12:07:58
【问题描述】:
我们有一个长期运行的 EMR 集群,该集群上使用引导操作安装了多个库。其中一些库正在持续开发中,它们的代码库位于 GitHub 上。
我一直希望以与 Travis 和 CodeDeploy 类似的方式将 Travis CI 插入 AWS EMR。这个想法是让 GitHub 上的代码测试并自动部署到 EMR,同时使用引导操作在所有 EMR 节点上安装更新的库。
我想出的一个解决方案是在中间使用一个 EC2 实例,可以先使用 Travis 和 CodeDeploy 在实例上部署代码。之后触发实例上的午餐脚本以使用更新的库创建新的 EMR 集群。
但是,上述解决方案意味着我们每次部署新版本的系统时都需要创建一个新的 EMR 集群
还有其他建议吗?
【问题讨论】:
-
好问题,我们遇到了类似的问题,我们最终做了与您提出的解决方案非常相似的事情。我们的 CI 系统将代码部署到单个主机,然后每天 cron 每天创建一个新集群。这将我们的部署率限制为每天一次。但简化了集群之间的切换。我也很好奇是否有更好的方法
-
我们同时使用长期运行的和临时的 EMR 集群——我们最终可能会启动 20 个集群。一个用于生产,其余用于开发和质量检查。在维护这一点的过程中,我们已经看到了能够启动集群的不可思议的价值。如果您的新架构强制执行此操作,我打赌您会发现这是一件好事:在某种程度上,您定义的实际上是“蓝绿”部署,这是一个非常好的模式,IMO
-
@TomHarrisonJr 有趣! - 谢谢。您如何处理在长期运行的集群上引导新版本/库的问题?您是否终止旧集群并创建新集群?干杯
-
每个版本,即使对于长期运行的集群,都会启动一个新的集群并终止旧的集群。我们支持多种流数据输入机制,因此我们围绕它们构建了一个小框架来处理部署期间的瞬时切换,但除此之外,我们每次发布都会获得一组全新的实例(因此,每周几次)。
标签: amazon-web-services travis-ci amazon-emr aws-code-deploy