我正在 AWS Elastic Beanstalk 上运行一个应用程序,如果我想使用最新的 AMI,似乎需要创建一个新的环境。
如果我知道最新的 AMI ID 是什么,我可以在环境配置中更新它。
有没有地方可以找到最新的 Elastic Beanstalk AMI 的 ID,或者更好的是,是否可以在推出新版本时自动用新版本替换实例?
答案1
升级 AWS Beanstalk 环境的推荐和支持方法已记录在案这里并讨论托管平台更新这里,老实说,如果您希望事情变得简单(这就是 Beanstalk 的全部意义所在),我会坚持这一点,理论上您只会获得非中断更新,而 AWS 将管理该过程,因此不会出现停机。
所以我只想重申,托管平台更新可能是您或任何其他来自 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"
]
]
我们可以将上面的输出作为新排序的输入,但这次我们用通配符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 可以为您完成所有操作!
答案2
似乎即使您将 AMI 更改为 ElasticBeanstalk 使用的正确 AMI,它似乎也无法正常工作。它遗漏了所有文件。它无法正常工作。
我认为您必须启动一个具有更新的 AMI 的新 Elastic Beanstalk 环境。使一切正常运行,然后交换环境 URL。
答案3
您可以使用 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 swap。
答案4
在 Elastic Beanstalk 中选择您的服务,您将在仪表板中看到概览,在仪表板右侧,您可以看到 AMI 的配置,选择更改升级或降级您的 AMI。此时您将替换您的实例。因此请进行备份或克隆。