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


18

我正在AWS Elastic Beanstalk上运行应用程序,并且如果要使用最新的AMI,则似乎需要创建一个新环境。

如果我知道最新的AMI ID是什么,则可以在环境配置中对其进行更新。

是否有地方可以找到最新的Elastic Beanstalk AMI的ID,或者甚至更好,是否可以在每次推出新版本时自动将实例替换为新版本?


2
启动新环境,看看它启动的服务器上的AMI ID是什么?
ceejayoz

2
有点痛苦,不是吗?
本杰明

上一次我设置EB环境大约需要五分钟。Amazon Linux AMI每三个月IIRC发出一次。每月1.6分钟并不会给我带来太多痛苦。
ceejayoz

我再说一遍:感觉必须有更好的方法。但是你是对的,这没什么大不了的。
本杰明·

2
他们确实应该将这些发布在某些发行说明中或在他们的论坛中发布,而不是仅仅默默地发布。
刘坚

Answers:


2

此处记录推荐和受支持的升级AWS Beanstalk环境的方法并在讨论了托管平台更新,老实说,我坚持如果您希望事情变得简单(这就是Beanstalk的全部意义),那么您将在理论上仅获得不间断的更新,AWS将管理该流程,因此不会造成停机。

因此,我只想重申一下,托管平台更新可能是您或Google来这里的其他任何人所需要的,但是如果您想了解适用于Beanstalk环境的最新AWS提供的AMI,则可以使用AWS CLI轻松完成(感谢对他们的AMI上的Amazon命名约定保持理智)。

从您的环境中的实例开始,描述该实例以获取当前的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"
    ]
]

我们可以将上面的输出用作新的排序后的输入,describe-images但是这次我们将时间戳替换为*通配符,如下所示:

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

由于词汇排序和ISO 8601的强大功能,我们最终获得了最新的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

同样,我不建议您尝试手动更改为该AMI,Beanstalk拥有为您完成所有这些操作的准备!


0

即使将AMI更改为适当的AMI,ElasticBeanstalk似乎也可以使用。它似乎无法正常工作。它会丢失所有文件。它不能正常工作。

我认为您必须启动一个具有更新的AMI的新Elastic Beanstalk环境。使一切正常,然后交换环境URL。


0

您可以使用eb随附的托管更新功能,但是必须为此支付增强的运行状况报告。或使用“ eb platform show”命令;在辅助应用程序中,具有运行CURRENT = eb platform show your_env_name | sed -n '5p' | cut -d: -f2- | tr -d '[[:space:]]' LATEST =的cron- eb platform show your_env_name | sed -n '6p' | cut -d: -f2- | tr -d '[[:space:]]' 然后比较它们,如果不同,则可以使用eb clone(默认为新版本),然后进行cname交换。


0

导航到应用程序的仪表板,找到“配置”,然后单击“更改”

您应该会看到一个列表,您可以在其中选择一个平台。该列表中指示了最新版本。 选择平台

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

有表格显示每个平台使用哪个AMI版本。

我没有找到自动运行这些更新的方法。我实际上更喜欢在部署平台之前检查平台的变化并对其进行测试。


0

在Elastic Beanstalk中选择服务,您将在仪表板中看到概述,在仪表板右侧,您可以看到AMI的配置,选择更改升级或降级AMI。此时,您将要替换您的实例。因此进行备份或克隆。


-2

我可以使用以下步骤将Beanstalk上托管的当前应用程序更新为最新的Amazon Linux AMI。

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

2-导航到应用程序的配置页面,然后单击“实例”。

3-找到AMI ID,它应该像这样,AMI-xxxxxx。

4-获取AMI ID,然后导航回EC2控制台并单击AMI。

5-将视图更改为“公共映像”,并查找从Beanstalk配置更早检索到的AMI ID。

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

7-启动后,登录实例并根据您的应用程序要求进行自定义。

8-一旦满足您的所有要求,就可以创建此新实例的AMI映像。

9-获取在步骤8中创建的新实例AMI ID,并将其应用于Beanstalk应用程序配置。

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


1
我认为您误解了这个问题。我没有询问如何创建和使用自定义AMI,而是询问如何知道在创建新环境时应用的最新默认默认Elastic Beanstalk AMI ID,以及在可能的情况下如何自动应用新的AMI。由AWS发布时。
本杰明
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.