如何处理弹性beanstalk部署,以便仅上传已更改的文件

时间:2013-08-14 14:19:49

标签: git deployment elastic-beanstalk

我遇到弹性beanstalk的问题,因为我是AWS新手。我设置了所有内容并部署了第一个应用程序但当我推动另一组更改时,它只是替换了整个文件,而不仅仅是更改了文件。在开发过程中,localhost和server有不同的配置,所以会有不同的文件,但在这种情况下你在本地的东西是在服务器,这有点奇怪。

你能建议做什么吗?

3 个答案:

答案 0 :(得分:5)

如果我理解正确,你会问两个问题:

  1. 你能只推送更改的文件吗? 根据我的理解,我认为你不能。整个源包已上载,可以推送到相同或不同的服务器。每次部署它本质上都是一个新环境(取决于策略,即蓝绿色)。

  2. 本地与生产配置文件: 要使用不同的文件,您只需要在源包中提供它们,或者在部署过程中通过向.ebextensions中的.config文件添加脚本来更改它们。请查看customizing elastic beanstalk containers

答案 1 :(得分:1)

我不知道从何时开始,但现在您只能通过在AWS中使用Git部署来推送已更改的文件。

  

问:我的申请有多快更新?

     

将新应用程序版本部署到现有资源(例如环境)的速度要快得多(通常在一分钟之内),并且主要取决于新应用程序版本的大小。使用Git部署,只有修改后的文件才会传输到AWS Elastic Beanstalk,更新通常需要几秒钟。

来源:https://aws.amazon.com/elasticbeanstalk/faqs/

答案 2 :(得分:0)

我认为引用意味着只有为新的bundle创建而上传的文件才会被上传,但是对于每个创建的新bundle,bundle仍然包含所有服务器应用程序。我想你可能会混淆用源包推送的应用程序。

这是我用来设置部署过程的一个很好的资源。 http://www.deplication.net/2013/11/java-war-deployment-options-on-aws.html

基本上在弹性beanstalk中,您拥有具有环境的应用程序。环境运行任何不同类型的代码服务器的ec2服务器实例(如果选择可扩展),无论是java,.net等等。您的环境部署并运行与源关联的应用程序版本捆绑即可。

应用程序版本仅适用于该应用程序的任何环境,但如果环境的类型与该版本中的应用程序的类型不同,则无法使用。 application1的应用程序版本不适用于名为application2的应用程序。您可能可以为任何源包提供多个应用程序版本。因此,您可以拥有application2的应用程序版本,该应用程序版本指向application1中用于应用程序版本的源包。

提到的这个源包可以是您的单个应用程序。在java中,您可以拥有.war应用程序。您可以上传单个.war文件。这将在您的根或索引上运行,不需要应用程序名称。

在多个应用程序部署的情况下,您将上传包含.war文件的zip(每个包不能大于512 mbs)。如果.war被称为test.war,你将通过给ebs(弹性beanstalk)url w / test来访问这个java服务。例如。 ebsurl /测试。要有一个索引.war文件,你可以称之为ROOT.war。您上传的此zip文件或单个.war文件称为源包

有三种方法可以推送文件进行部署。通过ebs gui上传,使用git作为提及,或者将app / zip上传到s3-创建源包 - 然后将该源包部署到ebs中的环境。我给出的链接指南显示了如何使用java。

值得一提的是,所有源包都存储在与我认为的ebs应用程序绑定的s3存储桶中。这意味着当你将一个zip上传到ebs,到s3,或者通过git推送时,它会被保存在s3中。

每个源包或应用程序都可以从中创建应用程序版本。这些是部署到ec2实例的内容。您可以通过命令行,w / git或上传到ebs,这些是使用每个源包自动创建的。

在git的情况下,你添加你的更改,推送更改,然后它可能会生成一个新的源包,所有更改所推送的内容可能只是更改,但整个包是新的。然后,它可以部署从创建的源包生成的应用程序版本。现在我不知道是否会重新部署所有应用程序或仅更改那些应用程序。比如说你更新了ROOT.war并使用相同的test.war和上传或git推送创建了一个新的zip。它会重新部署还是仅重新部署ROOT.war。在可扩展的环境中,它必须将这些更改推广到所有存在的ec2实例。

这是我对高级ebs部署如何工作的理解。希望这有助于澄清。