AWS EMR上的持续集成

时间:2017-12-28 12:07:59

标签: amazon-web-services travis-ci amazon-emr aws-code-deploy

我们有一个长期运行的EMR集群,它使用引导操作在其上安装了多个库。其中一些库正在不断开发中,其代码库位于GitHub上。

我一直在寻找以与Travis和CodeDeploy类似的方式使用AWS EMR插入Travis CI。我们的想法是让GitHub上的代码自动测试并部署到EMR,同时使用引导操作在所有EMR节点上安装更新的库。

我提出的解决方案是在中间使用EC2实例,其中Travis和CodeDeploy可以首先用于在实例上部署代码。之后,触发实例上的午餐脚本以使用更新的库创建新的EMR集群。

但是,上述解决方案意味着我们每次部署新版本的系统时都需要创建一个新的EMR集群

还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

您绝对不希望维护EC2实例来编排这样的CI / CD流程。首先,它带来了许多挑战,因为随后您需要处理整个服务器实例,对其进行维护,处理网络,应用监视和警报以解决可用性问题,即使如此,您也将没有可用性。担保,这可能会导致其他问题。最重要的是,根本不需要为此类目的维护EC2实例。

我建议您调查将Amazon CodePipeline与Lambda Step Function一起使用。 步进功能可用于在完全无服务器的环境中协调EMR群集的配置。使用CodePipeline,您可以在Github存储库中设置一个Web挂钩,以在每次将更改提交到主Github分支(或指定的任何分支)后自动提取代码并启动新的部署。您可以使用EMRFS将S3存储桶或文件夹同步到群集的EMR文件系统,然后获得IAM的安全优势以及EMRFS附带的其他一致性保证。借助Lambda,您还可以无缝集成到Kinesis,DynamoDB和CloudWatch等其他服务中,这些服务将简化许多管理和开发任务,并使您能够以最小的努力获得更复杂的自动化。 >

有很多很棒的资源和教程,可以将CodePipeline与EMR一起使用,以及一般而言。以下是一些示例:

对于使用Lambda Step Function编排应用程序,也有很棒的教程,包括EMR的使用。以下是一些示例:

在最坏的情况下,如果所有这些选项均失败,例如,如果您需要在EMR集群完成引导后非常严格地控制EMR集群的启动过程,则始终可以创建一个已加载的Java JAR作为最后一步,然后使用它执行Shell脚本或使用各种Amazon Java库运行您的配置命令。即使在这种情况下,您仍然无需出于编排目的维护自己的EC2实例(我认为,即使它在Kubernetes中的Docker容器中运行,也很难证明其合理性),因为您可以轻松地维护该实例部署过程以及完全无服务器的方法。

有许多来自Amazon re:Invent会议的精彩视频,您可能需要观看这些视频才能快速入门,然后再进入研讨会。例如:

YouTube上还有更多此类视频。

Travis CI还支持Lambda部署,如下所述:https://docs.travis-ci.com/user/deployment/lambda/