Chaque AMI comprend les éléments suivants
Un modèle pour le volume de périphérique racine de l'instance
Les autorisations de configuration qui contrôlent quels comptes Amazon Web Services (AWS) peuvent utiliser les images de machine pour démarrer une instance.
Les périphériques de bloc qui spécifient le volume de périphérique racine à attacher à l'instance EC2 une fois qu'elle est lancée.
Comment créer une AMI
Il existe plusieurs outils disponibles pour construire les AMI d'or et certains des plus utilisés sont les suivants
Hashicorp's Packer
AWS Image Builder
Nous utiliserons Packer de Hashicorp pour créer notre AMI dorée.
Laissez-moi vous parler de Packer :
Packer vous permet de construire des images pour plusieurs plateformes comme AWS, Azure, GCP, Docker, etc. en utilisant les mêmes fichiers de configuration.
Packer est simple en termes de journalisation et de débogage car la sortie est clairement affichée dans la ligne de commande lorsque l'image est construite.
Packer utilise des fichiers JSON pour construire les composants qui sont des commandes simples et peuvent être facilement intégrés avec des pipelines CI/CD.
Packer dispose d'un support intégré pour l'utilisation de divers outils de gestion de configuration comme Ansible, Chef et Puppet, ainsi que d'un support pour les scripts Shell et PowerShell pour l'installation de logiciels.
Packer est distribué sous la forme d'un binaire léger et est contrôlé à l'aide d'un CLI.
Installation de Packer sur AWS EC2 Centos
Tout d'abord, vous devez disposer d'un serveur EC2Pour commencer, vous devez disposer d'une instance EC2 fonctionnant sur AWS avec le rôle d'administrateur IAM attaché à des fins de test. J'utiliserai une instance EC2 avec l'AMI CentOS 7. Nous devons également obtenir la clé publique ssh pour l'instance et la sauvegarder en tant que packer sur les paires de clés AWS qui se trouvent dans EC2.
Pour votre système d'exploitation, vous pouvez consulter la page d'installation officielle de HashiCorp Packer à partir d'ici ; https://learn.hashicorp.com/tutorials/packer/get-started-install-cli
Vous trouverez ci-dessous les commandes d'installation pour Linux CentOS 7.
DeuxièmementNous allons installer yum config manager pour gérer nos dépôts, puis nous ajouterons le dépôt officiel HashiCorp Linux et enfin nous installerons 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
Nous pouvons maintenant commencer à créer un modèle. Créons d'abord un dossier appelé WordPress puis nous devons créer un fichier à l'intérieur qui s'appellera dev.pkr.hcl
Copiez ce qui suit dans le fichier `dev.pkr.hcl`
Le code ci-dessous créera un noyau CentOS 7 mis à jour et une AMI WordPress installée.
packer {
required_plugins {
amazon = {
version = ">= 0.0.1"
source = "github.com/hashicorp/amazon"
}
}
}
variable "ssh_private_key_file" {
default = "/home/centos/.ssh/id_rsa"
}
// enregistrez la clé publique ssh de votre machine locale sur aws puis remplacez le nom de la paire de clés ssh ci-dessous.
variable "ssh_keypair_name" {
default = "packer"
}
variable "source_ami_name" {
default = "CentOS Linux 7 x86_64 HVM EBS ENA 1901_01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-*"
}
variable "instance_type" {
default = "t2.micro"
}
variable "ssh_username" {
default = "centos"
}
variable "ami_name" {
default = "bastion_wordpress_kernel_updated"
}
variable "region" {
default = "us-east-1"
}
variable "owners" {
default = "679593333241"
}
source "amazon-ebs" "image" {
ami_name = "${var.ami_name} {{timestamp}}"
ssh_private_key_file = "${var.ssh_private_key_file}"
ssh_keypair_name = "${var.ssh_keypair_name}"
instance_type = "${var.instance_type}"
ssh_username = "${var.ssh_username}"
region = "${var.region}"
source_ami_filter {
most_recent = true
owners = ["${var.owners}"]
filters = {
name = "${var.source_ami_name}"
virtualization-type = "hvm"
root-device-type = "ebs"
}
}
run_tags = {
Name = "Packer instance for ${var.source_ami_name}"
}
}
build {
sources = [
"source.amazon-ebs.image"
]
provisioner "shell" {
inline = [
"echo Installing Telnet",
"sudo yum update kernel -y",
"sudo yum install telnet -y", #Changement pour ubuntu
"sudo yum install elinks -y", #Changement pour 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" {
note = "Waiting for your verification"
}
}
A l'intérieur de notre dossier WordPress, lançons quelques commandes packer pour commencer à construire notre AMI.
packer init .
packer validate .
packer build .
Packer va démarrer une instance EC2 pour construire notre AMI et vous pouvez vérifier si les outils sont installés en ssh à l'instance créée par packer depuis notre instance EC2. Si les outils sont installés correctement, vérifiez et continuez la construction de Packer dans notre terminal.
Build 'amazon-ebs.image' terminé après 8 minutes 5 secondes.
==> Attente terminée après 8 minutes 5 secondes
==> La construction est terminée. Les artefacts des constructions réussies sont : -> amazon-ebs.image : Les AMI ont été créées : us-east-1: ami-055afae0b53a0262e
Pour moi, cela a pris 8 minutes et 5 secondes pour terminer et créer une AMI. Vous pouvez accélérer le processus en changeant le type d'instance dans le code de l'empaqueteur ci-dessus. L'AMI WordPress & Kernel créée et mise à jour sera située sous EC2 > Images > AMI's > Owned by me