我正在AWS Elastic Beanstalk上运行应用程序,并且如果要使用最新的AMI,则似乎需要创建一个新环境。
如果我知道最新的AMI ID是什么,则可以在环境配置中对其进行更新。
是否有地方可以找到最新的Elastic Beanstalk AMI的ID,或者甚至更好,是否可以在每次推出新版本时自动将实例替换为新版本?
我正在AWS Elastic Beanstalk上运行应用程序,并且如果要使用最新的AMI,则似乎需要创建一个新环境。
如果我知道最新的AMI ID是什么,则可以在环境配置中对其进行更新。
是否有地方可以找到最新的Elastic Beanstalk AMI的ID,或者甚至更好,是否可以在每次推出新版本时自动将实例替换为新版本?
Answers:
此处记录了推荐和受支持的升级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拥有为您完成所有这些操作的准备!
即使将AMI更改为适当的AMI,ElasticBeanstalk似乎也可以使用。它似乎无法正常工作。它会丢失所有文件。它不能正常工作。
我认为您必须启动一个具有更新的AMI的新Elastic Beanstalk环境。使一切正常,然后交换环境URL。
您可以使用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交换。
导航到应用程序的仪表板,找到“配置”,然后单击“更改”
您应该会看到一个列表,您可以在其中选择一个平台。该列表中指示了最新版本。 选择平台
AWS EB为不同的编程语言使用特定的设置。您可以在文档http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.platforms.html中找到设置列表。
有表格显示每个平台使用哪个AMI版本。
我没有找到自动运行这些更新的方法。我实际上更喜欢在部署平台之前检查平台的变化并对其进行测试。
我可以使用以下步骤将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创建新实例,也不会将您的最新应用程序部署到新实例上。