Cree una AMI personalizada de RHEL/CentOS 8 para AWS utilizando Image Builder

Rancho
Puedes descargar este artículo en formato PDF para apoyarnos a través del siguiente enlace.

Descarga la guía en formato PDF

apagar
Rancho

El
El

En esta guía, analizaremos cómo utilizar Image Builder para crear una AMI RHEL 8/CentOS 8 personalizada para AWS. Para los recién llegados a Image Builder, es una herramienta para crear imágenes de sistema personalizadas de Red Hat Enterprise Linux, incluidas imágenes de sistema que están listas para implementarse en plataformas en la nube.

El generador de imágenes procesa automáticamente los detalles de configuración del servidor para cada salida de imagen, por lo que es más rápido que el método de creación manual de imágenes. herramienta de línea de comandocompositorDisponible, así como la interfaz gráfica de usuario en la consola web Cockpit.

Bloque generador de imágenes

  • Plano? Defina una imagen de sistema personalizada enumerando los paquetes de software y las personalizaciones que se incluirán en el sistema. El plano se presenta al usuario en formato de texto sin formato (lenguaje mínimo de Tom (TOML)).
  • escribir? La combinación es una compilación separada de una imagen del sistema basada en una versión específica de un plano específico.
  • personalizado? Estas son especificaciones del sistema, no embalaje. Esto incluye usuarios, grupos y claves SSH.

Formato de salida del Generador de imágenes

El generador de imágenes le permite construir imágenes en múltiples formatos de salida. Vea la tabla a continuación.

Descripción Extensión de archivo de nombre CLI
Imagen QEMU QCOW2 qcow2 .qcow2
Imagen del sistema de archivos ext4 ext4-filesystem .img
Imagen de disco de partición sin formato partitioned-disk .img
Iniciar ISO en tiempo real live-iso .iso
archivo TAR tar .tar
Disco de imagen de máquina de Amazon ami .ami
Imagen de disco de Azure vhd .vhd
Disco de máquina virtual VMware vmdk .vmdk
Pila abierta openstack .qcow2

Paso 1: instale el paquete de software Image Builder

Antes de utilizar Image Builder, debe instalar los siguientes paquetes de software.

sudo yum -y install vim lorax-composer composer-cli cockpit-composer bash-completion

Habilite Image Builder para que se inicie después de cada reinicio:

sudo systemctl enable --now lorax-composer.socket

Para acceder a la interfaz de usuario a través de Cockpit, habilítela:

sudo systemctl enable --now cockpit.socket
sudo firewall-cmd --add-service=cockpit && sudo firewall-cmd --add-service=cockpit --permanent

Cargue el script de configuración del shell para que la función de autocompletar del comando compositor-cli pueda comenzar a funcionar inmediatamente sin reiniciar:

source  /etc/bash_completion.d/composer-cli

Paso 2: cree un plano para Image Builder

Usaremos la interfaz de línea de comando para hacer esto. Sin embargo, se puede realizar la misma operación desde la consola web de Cockpit. Para utilizar esta interfaz, ejecutecompositorComandos con opciones y parámetros apropiados.

Este es el generador de imágenes de flujo de trabajo:

  1. Exportar (guardar) definiciones de planos a archivos de texto sin formato
  2. Edite este archivo en un editor de texto
  3. Importe (envíe) el archivo de texto del plano a Image Builder
  4. Ejecute redactar para crear la imagen según el plano.
  5. Exportar archivos de imagen para descargar

Agregue su $ USUARIO al grupo de soldador.

sudo usermod -aG weldr $USER
newgrp weldr

Crear plano de Image Builder:

$ vim rhel8-base.toml

El mío ha sido modificado de la siguiente manera:

name = "rhel-8-base"
description = "A RHEL 8 Base Image"
version = "0.0.1"
groups = []

[[modules]]
name = "vim"
version = "*"

[[packages]]
name = "openssh-server"
version = "*"

[[packages]]
name = "rsync"
version = "*"

[[packages]]
name = "tmux"
version = "*"

[[packages]]
name = "git"
version = "*"

[[packages]]
name = "tree"
version = "*"

[[packages]]
name = "bash-completion"
version = "*"

[[packages]]
name = "lvm2"
version = "*"

[[packages]]
name = "wget"
version = "*"

[[packages]]
name = "firewalld"
version = "*"

[[packages]]
name = "python3"
version = "*"

[[packages]]
name = "python3-pip"
version = "*"

[[packages]]
name = "telnet"
version = "*"

[customizations.kernel]
append = "net.ifnames=0"

[[customizations.user]]
name = "rheladmin"
description = " RHEL Admin User"
password = "hashed-user-password"
key = "your-ssh-pub-key"
home = "/home/rheladmin/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]

Reemplazarcontraseña de usuario hashHash con la contraseña real. Para generar un hash, use el siguiente comando:

python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

ControlardocumentoTodas las entradas y páginas personalizadas.

Vuelva a colocar el plano en Image Builder:

$ composer-cli blueprints push rhel8-base.toml

Enumere los generadores de imágenes disponibles:

$ composer-cli  blueprints list
example-atlas
example-development
example-http-server
rhel-8-base

Paso 3: use Image Builder para crear una imagen del sistema

A través deStart Opción para crear una imagen para su máquina CentOS/RHEL.

$ composer-cli compose start BLUEPRINT-NAME IMAGE-TYPE

Para ver los tipos de imágenes disponibles, ejecute:

$ composer-cli compose types
alibaba
ami
ext4-filesystem
google
live-iso
openstack
partitioned-disk
qcow2
tar
vhd
vmdk

Ahora comenzaré a escribir con el plano y el tipo de salida creados.

$ composer-cli compose start rhel-8-base ami
Compose 036fb329-0443-48ad-9444-a1c70caa4b36 added to the queue

Para comprobar el estado de la escritura:

$ composer-cli compose status
036fb329-0443-48ad-9444-a1c70caa4b36 RUNNING  Sat Apr  4 15:41:12 2020 rhel-8-base     0.0.1 ami            

$ composer-cli compose status
036fb329-0443-48ad-9444-a1c70caa4b36 FINISHED Sat Apr  4 15:46:52 2020 rhel-8-base     0.0.1 ami              4668260352  

Después de escribir, descargue el archivo de imagen generado:

$ composer-cli compose image UUID

-- Example ---
$ composer-cli compose image 036fb329-0443-48ad-9444-a1c70caa4b36
036fb329-0443-48ad-9444-a1c70caa4b36-disk.ami: 4452.00 MB    

Paso 4: cargue la imagen AMI en AWS

Instale Python 3 y las herramientas pip:

sudo yum -y install python3 python3-pip

Utilice pip para instalar la herramienta de línea de comandos de AWS:

sudo pip3 install awscli

Configure el cliente de línea de comandos de AWS según sus detalles de acceso a AWS:

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

Configure el cliente de línea de comandos de AWS para usar su depósito:

$ BUCKET=ami-image-bucket
$ aws s3 mb s3://$BUCKET

Confirme la creación del depósito:

$ aws s3 ls 
2020-04-04 15:49:47 ami-image-bucket

Cree la función vmimport S3 en IAM y concédale acceso a S3:

printf '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }' > trust-policy.json

printf '{ "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 > role-policy.json

aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json

aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json

Cargue la imagen AMI en AWS:

$ BUCKET=ami-image-bucket
$ AMI=036fb329-0443-48ad-9444-a1c70caa4b36-disk.ami
$ aws s3 cp $AMI s3://$BUCKET
upload: ./036fb329-0443-48ad-9444-a1c70caa4b36-disk.ami to s3://ami-image-bucket/036fb329-0443-48ad-9444-a1c70caa4b36-disk.ami

Una vez completada la carga a S3, importe la imagen como una instantánea a EC2:

printf '{ "Description": "my-image", "Format": "raw", "UserBucket": { "S3Bucket": "%s", "S3Key": "%s" } }' $BUCKET $AMI > containers.json

aws ec2 import-snapshot --disk-container file://containers.json

Salida de muestra:

{
    "ImportTaskId": "import-snap-0617ccf6944d82089",
    "SnapshotTaskDetail": {
        "DiskImageSize": 0.0,
        "Format": "RAW",
        "Progress": "3",
        "Status": "active",
        "StatusMessage": "pending",
        "UserBucket": {
            "S3Bucket": "ami-image-bucket",
            "S3Key": "036fb329-0443-48ad-9444-a1c70caa4b36-disk.ami"
        }
    }
}

Confirmar el proceso de importación:

$ aws ec2 describe-import-snapshot-tasks --filters Name=task-state,Values=active
{
    "ImportSnapshotTasks": [
        {
            "ImportTaskId": "import-snap-0617ccf6944d82089",
            "SnapshotTaskDetail": {
                "DiskImageSize": 4668260352.0,
                "Format": "RAW",
                "Progress": "94",
                "SnapshotId": "snap-0fd61ffa2f2cd4ad0",
                "Status": "active",
                "StatusMessage": "Preparing snapshot",
                "UserBucket": {
                    "S3Bucket": "ami-image-bucket",
                    "S3Key": "036fb329-0443-48ad-9444-a1c70caa4b36-disk.ami"
                }
            },
            "Tags": []
        }
    ]
}

Inicie sesión en AWS y confirme la existencia de la instantánea.

Haga clic en "Instantánea" en EC2 y seleccionecrear una imagen:

Asigne un nombre a la imagen y establezca el tipo de virtualización, el tamaño y la descripción del disco, etc.

Una vez creada, la imagen estará disponible en la sección “AMI”.

referencia:

Directrices similares:

Utilice Kickstart para automatizar la instalación de RHEL y CentOS en KVM

Uso de Packer y Ansible para crear una imagen de máquina (AMI) de AWS EC2

Rancho
Puedes descargar este artículo en formato PDF para apoyarnos a través del siguiente enlace.

Descarga la guía en formato PDF

apagar
Rancho

El
El

Artículos Relacionados