第 3 章 在 Amazon Web Services 上将 Red Hat Enterprise Linux 镜像部署为 EC2 实例

您有多个选项,可在 Amazon Web Services(AWS)上将 Red Hat Enterprise Linux(RHEL)7 镜像部署为 EC2 实例。本章讨论选择镜像的选项,以及列出或引用主机系统和虚拟机(VM)的系统要求。本章还提供了从 ISO 镜像创建自定义虚拟机并将其上传到 EC2 和启动 EC2 实例的步骤。

重要

您可以从 ISO 镜像创建自定义虚拟机,但红帽建议您使用 Red Hat Image Builder 产品来创建自定义镜像,供特定云供应商使用。使用镜像构建器,您可以使用 ami 格式创建并上传 AMI(Amazon Machine Image)。如需更多信息,请参阅镜像构建器指南

本章在很多位置使用了 Amazon 文档。如需很多流程,请参阅引用的 Amazon 文档了解更多详情。

注意

如需可以在 AWS 上安全使用的红帽产品列表,请参阅 Amazon Web Services

先决条件

3.1. AWS 上的 Red Hat Enterprise Linux 镜像选项

下表列出了镜像的不同选择并记录镜像选项的不同。

表 3.1. 镜像选项

镜像选项订阅示例情境注意事项

选择部署一个 Red Hat Gold Image。

利用您现有的红帽订阅。

通过 Red Hat Cloud Access 程序 启用订阅,然后在 AWS 上选择 Red Hat Gold Image。

订阅包括红帽产品成本 ; 您可以为 Amazon 提供所有其他实例成本。

Red Hat Gold Images 被称为 "Cloud Access" 镜像,因为您使用现有的红帽订阅。红帽直接为 Cloud Access 镜像提供支持。

选择部署移动到 AWS 的自定义镜像。

利用您现有的红帽订阅。

通过 Red Hat Cloud Access 程序 启用订阅,上传您的自定义镜像并附加您的订阅。

订阅包括红帽产品成本 ; 您可以为 Amazon 提供所有其他实例成本。

移动到 AWS 的自定义镜像是 "Cloud Access" 镜像,因为您利用了您现有的红帽订阅。红帽直接为 Cloud Access 镜像提供支持。

选择部署包含 RHEL 的现有 Amazon 镜像。

AWS EC2 镜像包括红帽产品。

AWS 管理控制台上启动实例时,选择 RHEL 镜像,或者从 AWS Marketplace 中选择镜像。

根据 pay-as-you-go 模式每小时向 Amazon 支付。这样的镜像称为 "on-demand" 镜像。Amazon 支持 on-demand 镜像。

红帽提供了镜像的更新。AWS 通过 Red Hat Update Infrastructure(RHUI)提供更新。

注意

您可以使用 Red Hat Image Builder 为 AWS 创建自定义镜像。如需更多信息,请参阅镜像构建器指南

重要

您无法将 on-demand 实例转换为 Red Hat Cloud Access 实例。要从 on-demand 镜像改为 Red Hat Cloud Access bring-your-own-subscription(BYOS)镜像,请创建新的 Red Hat Cloud Access 实例并从您的按需实例迁移数据。在迁移数据后取消您的 on-demand 实例以避免出现重复账单。

本章的剩余部分包含与自定义镜像相关的信息和流程。

3.2. 安装 AWS CLI

本章的许多流程包括使用 AWS CLI。完成以下步骤以安装 AWS CLI。

先决条件

您需要已创建并有权访问 AWS 访问密钥 ID 和 AWS Secret 访问密钥。有关信息和说明,请参阅快速配置 AWS CLI

流程

  1. 安装 Python 3 和 pip 工具。

    # yum install python3
    # yum install python3-pip
  2. 使用 pip 命令安装 AWS 命令行工具

    # pip3 install awscli
  3. 运行 aws --version 命令验证您是否安装了 AWS CLI。

    $ aws --version
    aws-cli/1.16.182 Python/2.7.5 Linux/3.10.0-957.21.3.el7.x86_64 botocore/1.12.172
  4. 根据 AWS 访问详情配置 AWS 命令行客户端。

    $ aws configure
    AWS Access Key ID [None]:
    AWS Secret Access Key [None]:
    Default region name [None]:
    Default output format [None]:

3.3. 虚拟机配置设置

云虚拟机必须具有以下配置设置。

表 3.2. 虚拟机配置设置

设置建议

ssh

ssh 必须启用 SSH 来提供虚拟机的远程访问。

dhcp

应该为 dhcp 配置主虚拟适配器。

3.4. 从 ISO 镜像创建基本虚拟机

按照本节中的步骤从 ISO 镜像创建基础镜像。

先决条件

按照 Virtualization 部署和管理指南,为您的 Red Hat Enterprise Linux 7 主机机器启用虚拟化。

3.4.1. 下载 ISO 镜像

流程

  1. 红帽客户门户网站下载最新的 Red Hat Enterprise Linux ISO 镜像。
  2. 将镜像移动到 /var/lib/libvirt/images 目录中。

3.4.2. 从 ISO 镜像创建虚拟机

流程

  1. 确保已为虚拟化启用主机机器。有关安装可升级软件包的信息和步骤,请参阅在现有 Red Hat Enterprise Linux 系统上安装虚拟化软件包
  2. 创建并启动基本 Red Hat Enterprise Linux 虚拟机。有关创建虚拟机的说明,请参阅创建虚拟机

    1. 如果使用命令行创建虚拟机,请确保将默认内存和 CPU 设置为您所需的容量。将您的虚拟网络接口设置为 virtio

      下面是一个基本的命令行示例。

      virt-install --name _vmname_ --memory 2048 --vcpus 2 --disk size=8,bus=virtio --location rhel-7.0-x86_64-dvd.iso --os-variant=rhel7.0
    2. 如果您使用 virt-manager 应用程序创建虚拟机,请按照使用 virt-manager 创建虚拟机的步骤进行以下操作:

      • 不要选择 Immediately Start VM
      • MemoryStorage Size 设置为您需要的值。
      • 在开始安装前,请确保将 Virtual Network Interface Settings 中的 Model 更改为 virtio,并将您的 vCPU 更改为您想要的虚拟机容量设置。

3.4.3. 完成 RHEL 安装

执行以下步骤完成安装并在虚拟机启动后启用 root 访问。

流程

  1. 选择您要在安装过程中使用的语言。
  2. Installation Summary 视图中:

    1. Software Selection,选择 Minimal Install
    2. Done
    3. 点击 Installation Destination 并检查 Storage Configuration 中的 Custom

      • 确保 /boot 验证至少有 500 MB。您可以使用剩余空间作为 root /
      • 建议使用标准分区,但您可以使用逻辑卷管理(LVM)。
      • 您可以将 xfs、ext4 或者 ext3 用于文件系统。
      • 完成更改后点 Done
  3. Begin Installation
  4. 设置 Root 密码
  5. 重启虚拟机,然后在安装完成后以 root 身份登录。
  6. 配置镜像。

    注意

    确定安装并启用 cloud-init 软件包。

  7. 关闭虚拟机。

3.5. 将 Red Hat Enterprise Linux 镜像上传到 AWS

按照本节中的步骤,在主机机器中将您的镜像上传到 AWS。

3.5.1. 创建 S3 存储桶

导入到 AWS 需要 Amazon S3 存储桶。Amazon S3 存储桶是一个 Amazon 资源用于存储对象。作为上传镜像过程的一部分,您可以创建一个 S3 存储桶,然后将镜像移到存储桶。完成以下步骤以创建存储桶。

先决条件

  • 您需要安装 AWS CLI。如需更多信息,请参阅安装 AWS CLI

流程

  1. 启动 Amazon S3 控制台
  2. Create Bucket。此时会出现 Create Bucket 对话框。
  3. Name and region 视图中:

    1. 输入 Bucket name
    2. 选择 Region。在字段中输入您的区域,或者点击下拉并从所有可用区域选择您的区域。
    3. Next
  4. Configure options 视图中,选择所需选项并点 Next
  5. Set permissions 视图中,更改或者接受默认选项并点 Next
  6. 查看存储桶配置。
  7. Create bucket

    注意

    另外,您可以使用 AWS CLI 创建存储桶。例如: aws s3 mb s3://my-new-bucket 创建一个名为 my-new-bucket 的 S3 存储桶。有关 mb 命令的详情,请参考 AWS CLI 命令参考。

3.5.2. 创建 vmimport 角色

执行以下步骤创建 VM 导入所需的 vmimport 角色。如需更多信息,请参阅 Amazon 文档中的 VM Import Service Role 部分。

流程

  1. 创建名为 trust-policy.json 的文件并包含以下策略。在您的系统中保存该文件并记录其位置。

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Effect": "Allow",
             "Principal": { "Service": "vmie.amazonaws.com" },
             "Action": "sts:AssumeRole",
             "Condition": {
                "StringEquals":{
                   "sts:Externalid": "vmimport"
                }
             }
          }
       ]
    }
  2. 使用 create role 命令创建 vmimport 角色。指定 trust-policy.json 文件位置的完整路径。使用 file:// 作为路径的前缀。下面是一个示例。

    aws iam create-role _--role-name_ vmimport --assume-role-policy-document file:///home/sample/ImportService/trust-policy.json
  3. 创建名为 role-policy.json 的文件并包含以下策略。将 s3-bucket-name 替换为 S3 存储桶的名称。

    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Action":[
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket"
             ],
             "Resource":[
                "arn:aws:s3:::s3-bucket-name",
                "arn:aws:s3:::s3-bucket-name/*"
             ]
          },
          {
             "Effect":"Allow",
             "Action":[
                "ec2:ModifySnapshotAttribute",
                "ec2:CopySnapshot",
                "ec2:RegisterImage",
                "ec2:Describe*"
             ],
             "Resource":"*"
          }
       ]
    }
  4. 使用 put-role-policy 命令将策略附加到您创建的角色。指定 role-policy.json 文件的完整路径。下面是一个示例。

    aws iam put-role-policy _--role-name_ vmimport _--policy-name_ vmimport --policy-document file:///home/sample/ImportService/role-policy.json

3.5.3. 将 AMI 转换为 S3

完成以下步骤,将 Amazon Machine Image(AMI)转换为 S3。示例是代表 ; 它们将 qcow2 文件格式格式的镜像转换为 raw 格式。Amazon 接受 OVAVHDVHDX VMDK、和 raw 格式的镜像。如需更多信息,请参阅 Amazon 接受的镜像格式的 VM Import/Export Works

流程

  1. 运行 qemu-img 命令转换您的镜像。下面是一个示例。

    qemu-img convert -f qcow2 -O raw rhel-server-7.7-1-x86_64-kvm.qcow2 rhel-server-7.7-1-x86_64-kvm.raw
  2. 将镜像推送到 S3。

    aws s3 cp rhel-server-7.7.1-x86_64-kvm.raw s3://s3-_bucket-name_
    注意

    这个过程可能需要几分钟时间。完成后,您可以使用 AWS S3 控制台检查您的镜像是否已成功上传到 S3 存储桶

3.5.4. 从原始镜像创建 AMI

执行以下步骤从原始镜像创建 AMI。

先决条件

  • 您需要安装 AWS CLI。如需更多信息,请参阅安装 AWS CLI

流程

  • 您可以在 AWS CLI 上运行 aws ec2 import-image 命令从原始镜像创建 AMI。
# aws ec2 import-image --platform Linux --license-type BYOL --no-encrypted --description _imagedescription_ --architecture x86_64 --disk-containers Format=Raw,UserBucket="{S3Bucket=virtqes1,S3Key=rhel-server-ec2-7.9-30.x86_64.raw}" --region _regionname_

3.5.5. 从 AMI 启动实例

执行以下步骤从 AMI 启动和配置实例。

流程

  1. 在 AWS EC2 Dashboard 中选择 Images,然后选择 AMI
  2. 右键点击您的镜像并选择 Launch
  3. 选择满足或超过工作负载要求的 实例类型

    如需有关实例类型的信息,请参阅 Amazon EC2 实例类型

  4. Next: Configure Instance Details

    1. 输入您要创建的实例数量
    2. 对于 Network,选择您在设置 AWS 环境时创建的 VPC。为实例选择子网或创建新子网。
    3. 为 Auto-assign Public IP 选择 Enable

      注意

      这些是创建基本实例所需的最小配置选项。根据您的应用程序要求查看其他选项。

  5. 点击 Next: Add Storage。验证默认存储是否足够。
  6. 点击 Next: Add Tags

    注意

    标签可帮助您管理 AWS 资源。有关标记的信息,请参阅标记您的 Amazon EC2 资源

  7. Next: 配置安全组。选择设置 AWS 环境时创建的安全组。
  8. Review and Launch。验证您的选择。
  9. Launch。此时会提示您选择现有密钥对或创建新密钥对。选择设置 AWS 环境时创建的密钥对。

    注意

    验证您的私钥权限是否正确。如果需要,使用命令选项 chmod 400 <keyname>.pem 更改权限。

  10. Launch Instances
  11. View Instances。您可以命名实例。

    现在,您可以通过选择实例并点击 连接 来启动 SSH 会话到实例。使用为 独立 SSH 客户端提供的示例命令。

    注意

    另外,您可以使用 AWS CLI 启动实例。如需更多信息,请参阅 Amazon 文档中的启动、列出和终止 Amazon EC2 实例

3.5.6. 附加红帽订阅

完成以下步骤以附加您之前通过 Red Hat Cloud Access 程序启用的订阅。

先决条件

您必须已启用您的订阅。

流程

  1. 注册您的系统。

    subscription-manager register --auto-attach
  2. 附加您的订阅。