如何升级到AWS Elastic Beanstalk中的最新AMI?

我在AWS Elastic Beanstalk上运行一个应用程序,看起来我需要创build一个新的环境,如果我想使用最新的AMI。

如果我知道最新的AMI id是什么,我可以在环境configuration中更新它。

有没有一个地方可以find最新的Elastic Beanstalk AMI的ID,或者更好的办法是,每当新版本推出时,是否可以自动replace新版本的实例?

这里介绍了推荐和支持的升级AWS Beanstalk环境的方法,并在此处讨论托pipe平台更新,如果您希望事情变得简单(这就是Beanstalk的全部内容),说实话,我会坚持,理论上只有获得不间断的更新,AWS才能pipe理这个过程,所以没有停机时间。

所以我只想重申托pipe的平台更新可能是您或其他任何来自Google的用户所希望的,但是如果您想了解最新的AWS为您的Beanstalk环境提供的AMI,可以使用AWS CLI进行相当简单的操作(谢谢以理智的亚马逊在他们的AMI命名约定)。

从您的环境中的实例开始,描述实例以获取当前的AMI(如果您已经知道当前的AMI,则跳过)。

aws ec2 describe-instances --instance-ids i-0909613f35ec0ffee --query 'Reservations[*].Instances[*].ImageId' --output text ami-35290a56 

采取由此产生的AMI ID并描述它。

 aws ec2 describe-images --image-ids ami-35290a56 --query 'Images[*][Architecture, Hypervisor, Name, RootDeviceType, VirtualizationType]' --output json [ [ "x86_64", "xen", "aws-elasticbeanstalk-amzn-2016.03.0.x86_64-python34-hvm-201603290718", "ebs", "hvm" ] ] 

我们可以使用上面的输出作为一个新的,sorting的describe-imagesinput,但是这次我们用*通配符replace时间戳,如下所示:

 aws ec2 describe-images --filters 'Name=architecture,Values=x86_64' 'Name=virtualization-type,Values=hvm' 'Name=owner-alias,Values=amazon' 'Name=name,Values=aws-elasticbeanstalk-amzn-*.x86_64-python34-hvm-*' --query 'sort_by(Images[*], &Name)[-1].ImageId' --output text ami-1be5de78 

由于词法sorting和ISO 8601的强大function,我们最终得到了最新的AMI,在我的例子中是ami-1be5de78

 aws ec2 describe-images --image-ids ami-1be5de78 --query 'Images[*].Name' --output text aws-elasticbeanstalk-amzn-2016.09.0.x86_64-python34-hvm-201612200708 

再次,我不会build议你尝试用手改变这个AMI,Beanstalk有规定为你做这一切!

看起来好像即使你改变了AMI,也要使用一个合适的AMI ElasticBeanstalk。 它似乎没有正常工作。 它错过了所有的文件。 这不正确。

我认为您必须启动具有更新的AMI的新的Elastic Beanstalk环境。 使一切工作,然后交换环境url。

您可以使用eb附带的托pipe更新function,但必须为增强的健康报告付费。 或者使用'eb platform show'命令; 在一个工人应用程序中有一个运行CURRENT = eb platform show your_env_name | sed -n '5p' | cut -d: -f2- | tr -d '[[:space:]]'的cron eb platform show your_env_name | sed -n '5p' | cut -d: -f2- | tr -d '[[:space:]]' eb platform show your_env_name | sed -n '5p' | cut -d: -f2- | tr -d '[[:space:]]' eb platform show your_env_name | sed -n '5p' | cut -d: -f2- | tr -d '[[:space:]]' LATEST = eb platform show your_env_name | sed -n '6p' | cut -d: -f2- | tr -d '[[:space:]]' eb platform show your_env_name | sed -n '6p' | cut -d: -f2- | tr -d '[[:space:]]' eb platform show your_env_name | sed -n '6p' | cut -d: -f2- | tr -d '[[:space:]]' – 然后比较它们,如果不同,可以使用eb clone(默认为新版本),然后使用cname swap。

导航到您的应用程序的仪表板find“configuration”,然后点击“更改”

你应该看到一个列表,你可以select一个平台。 最新版本显示在该列表中。 select平台

AWS EB针对不同的编程语言使用特定的设置。 您可以在http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.platforms.html文档中find设置列表。

有些表格显示了每个平台使用的AMI版本。

我没有find自动运行这些更新的方法。 我实际上更喜欢查看平台的变化,并在部署之前testing它们。

在Elastic Beanstalk中select您的服务,您将在仪表板中看到概述,右侧的仪表板中可以看到AMI的configuration,select更改升级或降级您的AMI。 在这一点上,你将要取代你的实例。 所以做备份或克隆。

我能够使用以下步骤将我在Beanstalk上托pipe的当前应用程序更新到最新的Amazon Linux AMI。

1-login到AWS控制台并导航到Beanstalk门户。

2-导航到您的应用程序的configuration页面,并点击“实例”。

3-findAMI id,应该像AMI-xxxxxx一样。

4-取出AMI标识并导航回EC2控制台,然后单击AMI。

5-将视图更改为公共图像,并从Beanstalkconfiguration中查找先前检索的AMI id。

6-启动AMI作为新的实例。

7-一旦启动login到实例并根据您的应用程序要求进行自定义。

8-一旦你满意的一切就绪,你想创build一个这个新实例的AMI图像。

9-获取在步骤8中创build的新实例AMI标识,并将其应用于您的Beanstalk应用程序configuration。

10-它不会删除旧实例,并使用自定义AMI创build新实例,并将最新的应用程序部署到新实例上。