有没有办法将更改推送到AWS Beanstalk而不是在每次部署时上传整个zip文件?

时间:2017-03-03 15:10:51

标签: amazon-web-services heroku deployment elastic-beanstalk

我正在迁移游戏!从Heroku到AWS Beanstalk的应用程序。 Heroku在部署方面非常直接:只需将更改推送到Heroku上的远程git存储库,并在服务器端进行构建。

这非常方便,因为没有必要为每个微小的更改上传整个项目(包括所有库!)。

基本上每次更改我们都会生成一个巨大的140 MB Docker压缩文件,上传至少需要10分钟。

肯定有一个更好的方法,但是长期搜索Google只会返回选项,使用像Jenkins这样的脚本和替代品来自动生成文件,但这并不能解决问题,只是自动解决问题。

有没有人有更好的解决方案?

3 个答案:

答案 0 :(得分:0)

简短回答:不。

长答案:我最终用激活器包装应用程序,而不是使用Docker。

  1. 创建名为" dist"的文件夹在项目的根目录。
  2. 包含名为Procfile的文件,其中包含以下行:
  3. web: ./bin/YOUR_APP_NAME -Dhttp.port=5000 -Dconfig.file=conf/application.conf

    请务必使用build.sbt中配置的应用名称替换YOUR_APP_NAME。

    1. 使用以下命令打包Play应用程序:
    2. activator clean dist

      这将在项目中的target / universal /文件夹中生成一个zip文件。

      1. 将该zip文件部署到AWS Elastic Beanstalk。

答案 1 :(得分:0)

所以我也对这个问题感到好奇,并与AWS专家讨论了不同的选择。每个选项都有它的缺点。

  • 第一个选项是烘焙应用程序代码,从中创建AMI并使用烘焙AMI执行部署。 More on that

    在采用之前,您必须首先测试此方法。缺点是您必须定期维护AMI。自从AMI被锁定后,您可能还会错过Beanstalk的关键补丁

    关于此主题的好read

  • 接下来的方法是退出Beanstalk并使用CloudFormation,您只需将应用程序文件夹上传到S3即可。您的CloudFormation模板必须处理所需的所有资源并使用AWS :: CloudFormation :: Init和cfn-signals,可以安装和设置软件。资源中的更改可以通过使用元数据来检测元数据正确的CloudFormation信号,我们还可以在模板规范上检测到更改时运行用户指定的操作。

    (AWS::CloudFormation::Init)

    http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html(可与CloudFormation一起使用的辅助脚本集)

虽然这些并不是您要求的解决方案,但它们可能是一个不错的选择。至少我确保你没有错过Beanstalk的任何可用选项。

我从他们那里得到的一个建议是考虑将应用程序拆分为多个组件和子组件。这会大大减少您的应用程序大小。

希望这会有所帮助。

答案 2 :(得分:0)

您可以设置AWS CodeCommit存储库,并将其用作本地remote存储库的git。接下来,您可以设置AWS CodePipeline来构建应用程序,并在AWS CodeCommit存储库有新提交时部署到Elastic Beanstalk。

这样您就不必每次都上传所有内容。每当您执行git push时,只会将更改的文件上载到AWS CodeCommit存储库,然后AWS CodePipeline负责构建您的应用程序并将其部署到Elastic Beanstalk。