Background Image
TECNOLOGÍA

Martes técnico: Construyamos una AMI actualizada de WordPress y el núcleo con Packer

March 29, 2022 | 4 Minuto(s) de lectura

¿Qué es un IAM?

UnaImagen de máquina de Amazon(AMI) es una imagen maestra para la creación de servidores virtuales en un entorno de AWS. Las imágenes de máquina son como plantillas que se configuran con un sistema operativo y otro software, lo que determina el sistema operativo del usuario. Los tipos de AMI se clasifican según la región, el sistema operativo, la arquitectura del sistema (32 o 64 bits), los permisos de lanzamiento y si están respaldados por Amazon EBS o por el almacén de instancias. Las AMI proporcionan la información necesaria para lanzar una instancia de Amazon EC2, que es un servidor virtual en la nube de AWS.

Cada AMI incluye lo siguiente

  • Una plantilla para el volumen de dispositivo raíz de la instancia. 

  • Permisos de configuración que controlan qué cuentas de Amazon Web Services (AWS) pueden utilizar las imágenes de máquina para crear una instancia 

  • Los dispositivos de bloque que especifican el volumen de dispositivo raíz que se adjuntará a la instancia EC2 una vez lanzada

Cómo crear una AMI

Hay varias herramientas disponibles para construir las AMIs doradas y algunas de las más utilizadas son

  • Packer de Hashicorp 

  • Constructor de imágenes de AWS 

Utilizaremos Packer de Hashicorp para crear nuestra AMI dorada.

Dejadme que os hable también de Packer:

  • Packer te permite construir imágenes para múltiples plataformas como AWS, Azure, GCP, Docker, etc. usando los mismos archivos de configuración. 

  • Packer es simple en términos de registro y depuración ya que la salida se muestra claramente en la línea de comandos cuando se construye la imagen. 

  • Packer utiliza archivos JSON para construir los componentes que son comandos simples y se pueden integrar fácilmente con tuberías CI / CD. 

  • Packer tiene soporte integrado para usar varias herramientas de gestión de configuración como Ansible, Chef y Puppet junto con soporte de scripts Shell y PowerShell para instalar software. 

  • Packer se distribuye como un binario ligero y se controla mediante CLI. 

Instalación de Packer en AWS EC2 Centos

PrimeroEn primer lugar, necesitas tener una instancia EC2 corriendo en AWS con el rol de administrador IAM adjunto para propósitos de prueba. Voy a utilizar una instancia EC2 con CentOS 7 AMI. También tenemos que obtener la clave pública ssh para la instancia y guardarlo como packer en AWS pares de claves que se encuentra en EC2.

Para tu sistema operativo puedes consultar la página oficial de instalación de HashiCorp Packer desde aquí; https://learn.hashicorp.com/tutorials/packer/get-started-install-cli

A continuación tengo los comandos de instalación para Linux CentOS 7.

Segundoinstalaremos yum config manager para gestionar nuestros repositorios luego añadiremos el repositorio oficial de HashiCorp Linux y a continuación instalaremos Packer.

  • sudo yum install -y yum-utils 

  • sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo 

  • sudo yum -y install packer 

  • packer --version 

Ahora podemos empezar a crear una plantilla. En primer lugar vamos a crear una carpeta llamada WordPress entonces tenemos que crear un archivo dentro de que se llamará dev.pkr.hcl 

Copia lo siguiente en el archivo `dev.pkr.hcl`.

El siguiente código creará un Kernel CentOS 7 actualizado y una AMI con WordPress instalado.

packer { plugins_requeridos { amazon = { version = ">= 0.0.1" source = "github.com/hashicorp/amazon" } } } variable "ssh_private_key_file" { por defecto = "/home/centos/.ssh/id_rsa" } // guarda la clave pública ssh de tu máquina local en aws y luego reemplaza el nombre del par de claves ssh a continuación. variable "ssh_keypair_name" { por defecto = "packer" } variable "source_ami_name" { por defecto = "CentOS Linux 7 x86_64 HVM EBS ENA 1901_01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-*" } variable "instance_type" { por defecto = "t2.micro" } variable "ssh_username" { por defecto = "centos" } variable "ami_name" { por defecto = "bastion_wordpress_kernel_updated" } variable "region" { por defecto = "us-east-1" } variable "owners" { por defecto = "679593333241" } source "amazon-ebs" "image" { ami_name = "${var.ami_name} {{timestamp}}" archivo_clave_ssh_privada = "${var.archivo_clave_ssh_privada}" ssh_keypair_name = "${var.ssh_keypair_name}" instance_type = "${var.instance_type}" ssh_username = "${var.ssh_username}" region = "${var.region}" filtro_ami_fuente { más_recientes = true propietarios = ["${var.propietarios}"] filtros = { name = "${var.source_ami_name}" tipo de virtualización = "hvm" root-device-type = "ebs" } } run_tags = { Nombre = "Instancia de empaquetador para ${var.source_ami_name}" } } build { fuentes = [ "fuente.amazon-ebs.imagen" ] provisioner "shell" { inline = [ "sudo yum update kernel -y" "sudo yum update kernel -y", "sudo yum install telnet -y", #Cambio para ubuntu           "sudo yum install elinks -y", #Cambio para ubuntu "sudo yum install httpd -y", "sudo yum install php -y", "sudo systemctl restart httpd", "sudo systemctl enable httpd", "sudo yum install wget -y", "sudo wget https://wordpress.org/wordpress-4.0.32.tar.gz", "sudo tar -xf wordpress-4.0.32.tar.gz -C /var/www/html/", "sudo mv /var/www/html/wordpress/* /var/www/html/", "sudo yum install php-mysql -y", "sudo systemctl restart httpd", "sudo chown -R apache:apache /var/www/html/", "sudo systemctl restart httpd" ] } provisioner "breakpoint" { nota = "Esperando su verificación" } }

Dentro de nuestra carpeta WordPress vamos a ejecutar algunos comandos packer para empezar a construir nuestra AMI.

packer init . 

packer validate . 

packer build . 

Packer iniciará una instancia EC2 para construir nuestra AMI y puedes verificar si las herramientas están instaladas haciendo ssh a la instancia creada por packer desde nuestra instancia EC2. Si las herramientas están instaladas correctamente, verifíquelo y continúe con la compilación de Packer en nuestro terminal.

Build 'amazon-ebs.image' finished after 8 minutes 5 seconds.

==> Espera completada después de 8 minutos 5 segundos

==> Compilación finalizada. Los artefactos de las construcciones exitosas son: -> amazon-ebs.image: AMIs fueron creados: us-east-1: ami-055afae0b53a0262e

En mi caso, tardó 8 minutos y 5 segundos en completar y crear una AMI. Puedes hacerlo más rápido cambiando el tipo de instancia en el código del empaquetador anterior. La AMI actualizada de WordPress y Kernel creada se encontrará en EC2 > Images > AMI's > Owned by me

Tecnología

Reflexiones más recientes

Explore las entradas de nuestro blog e inspírese con los líderes de opinión de todas nuestras empresas.
Asset - Unlock the Value Thumbnail
Nube

Transformación de la planificación financiera: De SAP BPC a SAP Analytics Cloud (SAC)

Explore las ventajas y los retos de la transición de SAP BPC a SAP Analytics Cloud (SAC) para la planificación financiera.