我有一个运行 Red Hat Enterprise Linux (RHEL) 且使用自带许可 (BYOL) 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。我想将其迁移至使用 Red Hat Update Infrastructure (RHUI) 来进行更新和修补操作。
解决方法
**重要事项:**在停止和启动实例之前,请执行以下操作:
**注意:**当停止或启动某个实例时,该实例的公共 IP 地址将发生变化。最佳实践是使用弹性 IP 地址而不是公共 IP 地址将外部流量路由到您的实例。如果您使用的是 Amazon Route 53,则在公共 IP 地址发生变化时可能需要更新 Route 53 DNS 记录。
要将您的实例迁移至 RHUI 许可证,请完成以下步骤:
-
如果您在实例上使用代理,请停用实例元数据服务 (IMDS) IP 地址的代理。
-
要确定您的实例使用的是 BYOL 许可证还是 AWS 许可证,请根据您的 IMDS 版本运行以下命令:
IMDSv1:
curl http://169.254.169.254/latest/dynamic/instance-identity/document 2>/dev/null | grep billingProducts
IMDSv2:
curl --noproxy '*' -w "\n" -s \
-H "X-aws-ec2-metadata-token: \
$(curl --noproxy '*' -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 300")" \
http://169.254.169.254/latest/dynamic/instance-identity/document \
| grep billingProducts
输出示例:
$ curl http://169.254.169.254/latest/dynamic/instance-identity/document 2>/dev/null | grep billingProducts
"billingProducts" : null,
**注意:**如果 billingProducts 为 null,则实例使用的是 BYOL。
-
使用 AWS Marketplace 亚马逊机器映像 (AMI) 启动与原始实例相同 RHEL 版本的新 RHEL 实例。确保使用与原始实例相同的可用区,然后选择类似的实例类型。
-
运行以下命令检查实例的计费代码,然后验证新实例是否使用 RHUI:
curl http://169.254.169.254/latest/dynamic/instance-identity/document 2>/dev/null | grep billingProducts
"billingProducts" : [ "bp-6fa54006" ],
-
运行以下命令,以验证新实例是否安装了 RHUI 客户端软件包:
sudo rpm -qa | grep rhui
输出示例:
$ sudo rpm -qa | grep rhui
rh-amazon-rhui-client-4.0.4-1.el8.noarch
-
运行以下命令之一,以在新实例上下载(但不安装)RHUI 客户端软件包的 RPM 文件:
sudo yum install --downloadonly --downloaddir=/tmp rh-amazon-rhui-client -y
-或-
sudo yumdownloader --downloaddir=/tmp rh-amazon-rhui-client
-
运行以下命令,以验证您是否在新实例上正确下载了 RPM 软件包:
ls -l /tmp | grep rh-amazon-rhui-client
-rw-r--r--. 1 root root 43680 Mar 4 19:42 rh-amazon-rhui-client-4.0.5-1.el8.noarch.rpm
-
运行以下命令之一,以将 RHUI 客户端的 RPM 文件从新实例复制到原始实例:
scp /tmp/rh-amazon-rhui-client-*.rpm ec2-user@BYOL-instance-ip:/tmp/
-或-
rsync -avz /tmp/rh-amazon-rhui-client-*.rpm ec2-user@BYOL-instance-ip:/tmp/
-
运行以下命令,以从原始实例中删除现有的 RHUI 配置和软件包:
sudo yum remove $(rpm -qa | grep rhui) -y
-
运行以下命令,以使用复制的 RPM 文件在原始实例上安装 RHUI 客户端:
sudo yum install /tmp/rh-amazon-rhui-client-*.rpm -y
- 运行以下命令,以验证您是否在原始实例上正确安装了软件包:
sudo rpm -qa | grep rhui
- 打开 Amazon EC2 控制台,然后记下您的原始实例的网络配置,例如 IP 地址、弹性 IP 地址和安全组。您可能需要在新实例中创建这些设置。
- 停止新实例和原始实例。
- 从两个实例中分离所有 Amazon EBS 卷。记下原始实例上每个卷的设备名称或 ID。
- 将原始实例的卷附加到新实例。
**注意:**请使用与原始实例上卷相同的设备名称:
- 启动新实例。
- 连接到新实例,然后运行以下命令以验证您是否可以获取计费代码:
curl http://169.254.169.254/latest/dynamic/instance-identity/document 2>/dev/null | grep billingProducts
"billingProducts" : [ "bp-6fa54006" ],
- 运行以下命令以验证存储库配置是否正确:
sudo yum clean all
sudo yum repolist
- 如果您不再需要原始实例的分离卷,请将其删除。在验证更新时,您可以将其保留为备份。
对问题进行故障排除
如果交换卷后实例无法启动,请验证您是否已将卷附加到正确的设备名称。如果仍然遇到问题,请创建根卷的快照并重复解决步骤。
如果您无法访问存储库,请运行以下命令以验证您是否安装了 RHUI 客户端:
rpm -qa | grep rhui
此外,请检查您与元数据服务器的网络连接。
相关信息
Migrate RHEL BYOL systems to AWS License-Included instances by using AWS Application Migration Service(使用 AWS Application Migration Service 将 RHEL BYOL 系统迁移到包含 AWS 许可证的实例)
Red Hat Enterprise Linux on Amazon EC2 FAQs(Amazon EC2 上的 Red Hat Enterprise Linux 常见问题解答)