第 10 章 使用 RHEL 镜像构建器准备并上传云镜像
RHEL 镜像构建器可以创建准备在各种云平台上使用的自定义系统镜像。要在云中使用自定义的 RHEL 系统镜像,请使用 RHEL 镜像构建器,使用所选的输出类型创建系统镜像,配置您的系统以上传镜像,并将镜像上传到您的云帐户中。您可以在 RHEL web 控制台中通过 Image Builder
应用程序推送自定义镜像云,可用于我们支持的服务提供商的子集,如 AWS 和 Microsoft Azure 云。请参阅 创建镜像并直接将其自动上传到 AWS Cloud AMI 和 创建 VHD 镜像并直接将其自动上传到 Microsoft Azure 云。
10.1. 准备 AMI 镜像,并将其上传到 AWS
您可以创建自定义镜像,并使用 RHEL 镜像构建器,手动或自动将其更新到 AWS 云。
10.1.1. 准备手动上传 AWS AMI 镜像
在上传 AWS AMI 镜像前,您必须配置系统来上传镜像。
前提条件
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
安装 Python 3 和
pip
工具:# dnf install python3 python3-pip
使用
pip
安装 AWS 命令行工具 :# pip3 install awscli
设置您的配置文件。终端提示您提供凭证、地区和输出格式:
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
为存储桶定义名称,并创建存储桶:
$ BUCKET=bucketname $ aws s3 mb s3://$BUCKET
使用实际的存储桶名称替换
bucketname
。它必须是全局唯一的名称。因此,您的存储桶会被创建。要授予访问 S3 存储桶的权限,如果您还没有这样做,请在 AWS Identity and Access Management (IAM) 中创建一个
vmimport
S3 角色:创建一个 JSON 格式的带有信任策略配置的
trust-policy.json
文件。例如:{ "Version": "2022-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:Externalid": "vmimport" } } }] }
创建一个 JSON 格式的带有角色策略配置的
role-policy.json
文件。例如:{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::%s", "arn:aws:s3:::%s/"] }, { "Effect": "Allow", "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe"], "Resource": "*" }] } $BUCKET $BUCKET
使用
trust-policy.json
文件为您的 Amazon Web Services 帐户创建一个角色:$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
使用
role-policy.json
文件嵌入一个内联策略文档:$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
10.1.2. 使用 CLI 手动将 AMI 镜像上传到 AWS
您可以使用 RHEL 镜像构建器构建 ami
镜像,并使用 CLI 手动将它们直接上传到 Amazon AWS Cloud 服务提供商。
流程
使用文本编辑器,使用以下内容创建配置文件:
provider = "aws" [settings] accessKeyID = "AWS_ACCESS_KEY_ID" secretAccessKey = "AWS_SECRET_ACCESS_KEY" bucket = "AWS_BUCKET" region = "AWS_REGION" key = "IMAGE_KEY"
将字段中的值替换为您的
accessKeyID
、secretAccessKey
、bucket
和region
的凭证。IMAGE_KEY
值是要上传到 EC2 的虚拟机镜像的名称。- 将文件保存为 CONFIGURATION-FILE.toml,然后关闭文本编辑器。
启动 compose 来将其上传到 AWS:
# composer-cli compose start blueprint-name image-type image-key configuration-file.toml
替换:
- 使用您创建的蓝图名称替换 blueprint-name
-
使用
ami
镜像类型替换 image-type。 - 使用要上传到 EC2 的虚拟机镜像的名称替换 image-key。
带有云提供商的配置文件名称的 configuration-file.toml。
注意您必须有要将自定义镜像发送到的存储桶的正确 AWS 身份和访问管理(IAM)设置。在将镜像上传到存储桶前,您必须对存储桶设置策略。
检查镜像构建的状态:
# composer-cli compose status
完成镜像上传过程后,您可以看到"FINISHED"状态。
验证
要确认镜像上传成功:
-
访问菜单中的 EC2,并在 AWS 控制台中选择正确的区域。镜像必须具有
available
状态,以指示它已被成功上传。 - 在仪表盘上,选择您的镜像并点击 。
其它资源
10.1.3. 创建镜像并自动将其上传到 AWS Cloud AMI
您可以使用 RHEL 镜像构建器创建 (.raw)
镜像,并选择 Upload to AWS 复选框,自动将您创建的输出镜像直接推送到 Amazon AWS Cloud AMI 服务提供商。
前提条件
-
您必须有访问系统的
root
或wheel
组用户权限。 - 您已在浏览器中打开了 RHEL web 控制台的 RHEL 镜像构建器界面。
- 您已创建了蓝图。请参阅在 web 控制台界面中创建一个蓝图。
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
- 在 RHEL 镜像构建器仪表盘中,点之前创建的 blueprint name。
- 选择选项卡 。
单击
来创建自定义镜像。Create Image 窗口打开。
-
在 Type 下拉菜单中选择
Amazon Machine Image Disk (.raw)
。 - 选中 Upload to AWS 复选框,将您的镜像上传到 AWS 云,然后点 。
要验证您是否可以访问 AWS ,请在对应的字段中输入您的
"AWS access key ID"
和"AWS secret access key"
。点 。注意您只能在创建新 Access Key ID 时查看 AWS secret access key 。如果您不知道您的 Secret Key,请生成一个新的 Access Key ID。
-
在
Image name
字段中输入镜像名称,在Amazon S3 bucket name
字段中输入 Amazon bucket 名称,并为您要添加自定义镜像的存储桶输入AWS region
字段。点 。 查看信息并点
。可选,点
来修改任何不正确的详情。注意您必须具有要发送自定义镜像的存储桶的正确 IAM 设置。此流程使用 IAM 导入和导出,因此您必须在将镜像上传到存储桶前为存储桶设置 策略。如需更多信息,请参阅 IAM 用户所需的权限。
-
在 Type 下拉菜单中选择
右上角的弹出窗口告诉您保存的进度。它还告知镜像创建过程、创建此镜像的过程以及后续的上传到 AWS Cloud。
完成这个过程后,您可以看到 镜像构建完成状态。
在浏览器中,访问 Service→EC2。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
Available
状态,以指示它已被上传。 - 在 AWS 仪表盘上,选择您的镜像并点 。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
- 此时会打开一个新窗口。根据启动镜像所需的资源选择实例类型。点 。
- 查看您的实例启动详情。如果需要进行任何更改,您可以编辑任何部分。点
在启动实例之前,选择一个访问它的公钥。
您可以使用您已有的密钥对,也可以创建一个新的密钥对。
按照以下步骤在 EC2 中创建新的密钥对,并将它连接到新实例。
- 在下拉菜单中选择 "Create a new key pair"。
- 输入新密钥对名称。它生成一个新的密钥对。
- 点 "下载密钥对" 在您的本地系统中保存新密钥对。
然后,您可以点
启动您的实例。您可以检查实例的状态,它显示为 Initializing。
- 实例状态变为 running 后, 按钮将变为可用。
点
。此时会出现一个窗口,其中包含有关如何使用 SSH 进行连接的说明。- 选择 A standalone SSH client 作为首选连接方法并打开终端。
在您存储私钥的位置,确保您的密钥是公开可见的,以便 SSH 可以正常工作。要做到这一点,请运行以下命令:
$ chmod 400 <_your-instance-name.pem_>
使用其公共 DNS 连接到您的实例:
$ ssh -i <_your-instance-name.pem_> ec2-user@<_your-instance-IP-address_>
键入
yes
以确认您要继续连接。因此,您通过 SSH 连接到您的实例。
验证
- 检查在使用 SSH 连接到您的实例的过程中是否能够执行任何操作。