Tutoriel : Créer une machine virtuelle ou un groupe de machines virtuelles identiques à partir de la galerie d’images partagées Azure à l’aide d’Ansible
Important
Ansible 2.9 (ou version ultérieure) est nécessaire pour exécuter les exemples de playbooks dans cet article.
Shared Image Gallery est un service qui permet aux clients de gérer, partager et organiser des images facilement. Cette fonctionnalité est utile pour les scénarios où de nombreuses images sont conservées et partagées. Les images personnalisées peuvent être partagées entre les abonnements et entre les locataires Microsoft Entra. Les images peuvent également être répliquées dans plusieurs régions, pour une mise à l’échelle plus rapide des déploiements.
Dans cet article, vous apprendrez comment :
- Créer une machine virtuelle généralisée et une image personnalisée
- Créer une galerie Shared Image Gallery
- Créer une image partagée et une version d’image
- Créer une machine virtuelle à l’aide de l’image généralisée
- Créer un groupe de machines virtuelles identiques à l’aide de l’image généralisée
- Obtenir des informations sur Shared Image Gallery, l’image et la version
Prérequis
- Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Installer Ansible. Pour cela, choisissez l’une des options suivantes :
- Installez et configurez Ansible sur une machine virtuelle Linux
- Configurez Azure Cloud Shell et, si vous n’avez pas accès à une machine virtuelle Linux, créez une machine virtuelle avec Ansible.
Obtenir les exemples de playbook
Il existe deux façons d’obtenir l’ensemble complet d’exemples de playbook :
- Télécharger le dossier SIG et l’enregistrer sur votre ordinateur local.
- Créer un fichier pour chaque section et y copier l’exemple de playbook.
Le fichier vars.yml
contient les variables utilisées par tous les exemples de playbooks pour ce tutoriel. Vous pouvez modifier le fichier pour fournir des noms et des valeurs uniques.
Le premier exemple de playbook 00-prerequisites.yml
crée ce qui est nécessaire pour suivre ce tutoriel :
- Un groupe de ressources, qui est un conteneur logique dans lequel les ressources Azure sont déployées et gérées.
- Un réseau virtuel, un sous-réseau, une adresse IP publique et une carte d’interface réseau pour la machine virtuelle.
- Une machine virtuelle source, utilisée pour créer l’image généralisée.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create resource group if doesn't exist
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
name: "{{ virtual_network_name }}"
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: "{{ resource_group }}"
name: "{{ subnet_name }}"
address_prefix: "10.0.1.0/24"
virtual_network: "{{ virtual_network_name }}"
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Static
name: "{{ ip_name }}"
- name: Create virtual network interface cards for VM A and B
azure_rm_networkinterface:
resource_group: "{{ resource_group }}"
name: "{{ network_interface_name }}"
virtual_network: "{{ virtual_network_name }}"
subnet: "{{ subnet_name }}"
- name: Create VM
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ source_vm_name }}"
admin_username: testuser
admin_password: "Password1234!"
vm_size: Standard_B1ms
network_interfaces: "{{ network_interface_name }}"
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
version: latest
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 00-prerequisites.yml
Dans le portail Azure, vérifiez le groupe de ressources que vous avez spécifié dans vars.yml
pour voir la machine virtuelle et les différentes ressources que vous avez créées.
Généraliser la machine virtuelle et créer une image personnalisée
Le playbook suivant, 01a-create-generalized-image.yml
, généralise la machine virtuelle source créée à l’étape précédente, puis crée une image personnalisée basée sur celle-ci.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Generalize VM
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ source_vm_name }}"
generalized: yes
- name: Create custom image
azure_rm_image:
resource_group: "{{ resource_group }}"
name: "{{ image_name }}"
source: "{{ source_vm_name }}"
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 01a-create-generalized-image.yml
Vérifiez votre groupe de ressources et assurez-vous que testimagea
s’affiche.
Créer la galerie Shared Image Gallery
La galerie d’images est le dépôt pour le partage et la gestion des images. L’exemple de code de playbook dans 02-create-shared-image-gallery.yml
crée une galerie Shared Image Gallery dans votre groupe de ressources.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create shared image gallery
azure_rm_gallery:
resource_group: "{{ resource_group }}"
name: "{{ shared_gallery_name }}"
location: "{{ location }}"
description: This is the gallery description.
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 02-create-shared-image-gallery.yml
Vous voyez maintenant une nouvelle galerie, myGallery
, dans votre groupe de ressources.
Créer une image partagée et une version d’image
Le playbook suivant, 03a-create-shared-image-generalized.yml
, crée une définition d’image et une version d’image.
Les définitions d’image incluent le type d’image (Windows ou Linux), les notes de publication et les exigences de mémoire maximale et minimale. La version d’image est la version de l’image. La galerie, la définition d’image et la version d’image vous aident à organiser les images en groupes logiques.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create shared image
azure_rm_galleryimage:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
name: "{{ shared_image_name }}"
location: "{{ location }}"
os_type: linux
os_state: generalized
identifier:
publisher: myPublisherName
offer: myOfferName
sku: mySkuName
description: Image description
- name: Create or update a simple gallery image version.
azure_rm_galleryimageversion:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
gallery_image_name: "{{ shared_image_name }}"
name: "{{ shared_image_version }}"
location: "{{ location }}"
publishing_profile:
end_of_life_date: "2020-10-01t00:00:00+00:00"
exclude_from_latest: yes
replica_count: 3
storage_account_type: Standard_LRS
target_regions:
- name: West US
regional_replica_count: 1
- name: East US
regional_replica_count: 2
storage_account_type: Standard_ZRS
managed_image:
name: "{{ image_name }}"
resource_group: "{{ resource_group }}"
register: output
- debug:
var: output
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 03a-create-shared-image-generalized.yml
Votre groupe de ressources a maintenant une définition d’image et une version d’image pour votre galerie.
Créer une machine virtuelle basée sur l’image généralisée
Enfin, exécutez 04a-create-vm-using-generalized-image.yml
pour créer une machine virtuelle basée sur l’image généralisée que vous avez créée à l’étape précédente.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create VM using shared image
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ vm_name }}"
vm_size: Standard_DS1_v2
admin_username: adminUser
admin_password: PassWord01
managed_disk_type: Standard_LRS
image:
id: "/subscriptions/{{ lookup('env', 'AZURE_SUBSCRIPTION_ID') }}/resourceGroups/{{ resource_group }}/providers/Microsoft.Compute/galleries/{{ shared_gallery_name }}/images/{{ shared_image_name }}/versions/{{ shared_image_version }}"
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 04a-create-vm-using-generalized-image.yml
Créer un groupe de machines virtuelles identiques basé sur l’image généralisée
Vous pouvez également créer un groupe de machines virtuelles identiques basé sur l’image généralisée. Pour ce faire, exécutez 05a-create-vmss-using-generalized-image.yml
.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create a virtual machine scale set using a shared image
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
vm_size: Standard_DS1_v2
admin_username: adminUser
admin_password: PassWord01
capacity: 2
virtual_network_name: "{{ virtual_network_name }}"
upgrade_policy: Manual
subnet_name: "{{ subnet_name }}"
managed_disk_type: Standard_LRS
image:
id: "/subscriptions/{{ lookup('env', 'AZURE_SUBSCRIPTION_ID') }}/resourceGroups/{{ resource_group }}/providers/Microsoft.Compute/galleries/{{ shared_gallery_name }}/images/{{ shared_image_name }}/versions/{{ shared_image_version }}"
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 05a-create-vmss-using-generalized-image.yml
Obtenir des informations sur la galerie
Vous pouvez obtenir des informations sur la galerie, la définition d’image et la version en exécutant 06-get-info.yml
.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Get Shared Image Gallery information
azure_rm_gallery_info:
resource_group: "{{ resource_group }}"
name: "{{ shared_gallery_name }}"
- name: Get shared image information
azure_rm_galleryimage_info:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
name: "{{ shared_image_name }}"
- name: Get Shared Image Gallery image version information
azure_rm_galleryimageversion_info:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
gallery_image_name: "{{ shared_image_name }}"
name: "{{ shared_image_version }}"
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 06-get-info.yml
Supprimer l’image partagée
Pour supprimer les ressources de la galerie, reportez-vous à l’exemple de playbook 07-delete-gallery.yml
. Supprimez les ressources dans l’ordre inverse. Commencez par supprimer la version d’image. Après avoir supprimé toutes les versions de l’image, vous pouvez supprimer la définition de l’image. Après avoir supprimé toutes les définitions de l’image, vous pouvez supprimer la galerie.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Delete gallery image version.
azure_rm_galleryimageversion:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
gallery_image_name: "{{ shared_image_name }}"
name: "{{ shared_image_version }}"
state: absent
- name: Delete gallery image
azure_rm_galleryimage:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
name: "{{ shared_image_name }}"
state: absent
- name: Delete a simple gallery.
azure_rm_gallery:
resource_group: "{{ resource_group }}"
name: "{{ shared_gallery_name }}"
state: absent
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook 07-delete-gallery.yml
Nettoyer les ressources
Enregistrez le code suivant en tant que
delete_rg.yml
.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Exécutez le playbook en utilisant la commande ansible-playbook. Remplacez l’espace réservé par le nom du groupe de ressources à supprimer. Toutes les ressources du groupe de ressources seront supprimées.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Points essentiels :
- En raison de la variable
register
et de la sectiondebug
du playbook, les résultats s’affichent quand la commande se termine.
- En raison de la variable