写在前面的话
最好不要走自定义AMI这个方案,如果你只是一个人的话,还是把OS维护的事,交给AWS EB团队维护比较好。
问题
有时候EB管理EC2系统版本没那么及时,就需要我们自己手动制作EC2镜像,来给AWS EB使用。
查询当前eb使用的镜像id
查询当前EB环境中使用的最新镜像id,可以从控制台看出来,也可以使用aws cli来查询对于eb环境不同的平台的镜像id是多少,具体CLI查询代码如下:
bash
# 查询java17平台
aws elasticbeanstalk describe-platform-version --region cn-north-1 --platform-arn "arn:aws:elasticbeanstalk:cn-north-1::platform/Corretto 17 running on 64bit Amazon Linux 2023/4.10.0" --query PlatformDescription.CustomAmiList
# 查询python3
aws elasticbeanstalk describe-platform-version --region cn-north-1 --platform-arn "arn:aws:elasticbeanstalk:cn-north-1::platform/Python 3.13 running on 64bit Amazon Linux 2023/4.11.0" --query PlatformDescription.CustomAmiList
这里主要是获得ImageId是多少,响应内容如下:
json
[
{
"VirtualizationType": "pv",
"ImageId": ""
},
{
"VirtualizationType": "hvm",
"ImageId": "ami-0ae3568632112c6fd"
}
]
这样获得ami id就可以,基于这个镜像来制作自己的系统镜像了。
制作ec2镜像
打开EC2控制台,开始启动新实例,如下图:

这里做一些常规的EC2配置即可,如设置名称,设置安全组,设置角色。这里最关键的步骤,就是找到上一部ami id来启动ec2,如下图:

整体设置如下:

设置没问题后,点击启动实例即可。
等待一段时间,使用AWS CLI连接上去看看,就说明没有问题了:
bash
aws ssm start-session --target i-093ce0589e6aabfd0
Starting session with SessionId: xxxx-bu7ak5bexqjg34zglcpfktalfq
sh-5.2$ bash
这样就启动成功了。
更新系统
先检查系统是否需要更新:
bash
sudo dnf check-release-update
如果出现如下结果:
bash
WARNING:
A newer release of "Amazon Linux" is available.
Available Versions:
Version 2023.10.20260325:
Run the following command to upgrade to 2023.10.20260325:
dnf upgrade --releasever=2023.10.20260325
Release notes:
https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.10.20260325.html
这说明有版本需要更新,直接运行如下命令即可:
bash
sudo dnf upgrade --releasever=2023.10.20260325 -y
等待一段时间,就安装成功了。还可以使用如下命令验证一下:
bash
cat /etc/*release
如果是内核更新,需要reboot一下。这里就不演示了,接下来直接启用内核实时更新。
启用内核实时更新
安装 DNF 插件
bash
sudo dnf install -y kpatch-dnf
安装 kpatch 软件包
bash
sudo dnf install -y kpatch-runtime
启用 DNF 插件
bash
sudo dnf kernel-livepatch -y auto
启动 kpatch 服务
启动 kpatch 服务。此服务在初始化或启动时会加载所有内核实时补丁。
bash
sudo systemctl enable kpatch.service && sudo systemctl start kpatch.service
然后,重启EC2:
bash
sudo reboot
验证安全公告和安全漏洞是否修复
bash
# 查公告
sudo dnf updateinfo list
# 查安全漏洞
sudo dnf updateinfo list cves
当重启后,重新登录到EC2实例,没有任何安全公告和安全漏洞,则说明安全问题也解决。就可以基于这个EC2实例制作镜像AMI了。
制作AMI镜像
停止上面设置好的EC2实例,如下图:

停止完成后,选择【创建映像】,如下图:

创建映像设置如下:

等待一段时间,映像状态从【待处理】变成【可用】后,即可清理原来的EC2实例。

这里我们就获得自己的AMI ID。接下来,就将这个AMI ID用到EB环境中了。
修改EB环境中的配置
找到EB中AMI ID设置处,如下图:

将默认AMI ID换成我们自己的AMI ID即可,如下图:

等待一段时间,EB状态OK了,就说明我们顺利解决EB默认系统不及时的问题。
总结
AI之下,找问题的速度是变快了,需要人解决问题的速度就不一定快了。这个中国区的AL2023发布日志页面,只有英文版更新了,中文版没有及时更新。
最好不要走自定义AMI这个方案,如果你只是一个人的话,还是把OS维护的事,交给AWS EB团队维护比较好。