第 12 章 使用 RHEL 镜像构建器准备并上传云镜像
RHEL 镜像构建器可以创建准备在各种云平台上使用的自定义系统镜像。要在云中使用自定义的 RHEL 系统镜像,请使用 RHEL 镜像构建器,使用所选的输出类型创建系统镜像,配置您的系统以上传镜像,并将镜像上传到您的云帐户。您可以通过 RHEL web 控制台中的 Image Builder
应用程序将自定义镜像推送到云,其可用于我们支持的服务提供商的子集,如 AWS 和 Microsoft Azure 云。请参阅 创建镜像并直接将自动将上传到 AWS Cloud AMI 和创建 VHD 镜像并自动将将上传到 Microsoft Azure 云。
12.1. 准备 AMI 镜像并将其上传到 AWS
您可以创建自定义镜像,并使用 RHEL 镜像构建器手动或自动将它们更新到 AWS 云。
12.1.1. 准备手动上传 AWS AMI 镜像
在上传 AWS AMI 镜像前,您必须配置系统来上传镜像。
先决条件
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须准备一个可写的 S3 存储桶。请参阅 创建 S3 存储桶。
流程
安装 Python 3 和
pip
工具:# yum 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
12.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
状态,以指示它已被成功上传。 - 在仪表盘上,选择您的镜像并点击 。
其它资源
12.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 连接到您的实例的过程中是否能够执行任何操作。