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