Esercitazione: Creare una macchina virtuale o un set di scalabilità di macchine virtuali dal Raccolta immagini condivise di Azure usando Ansible
Importante
Per eseguire i playbook di esempio contenuti in questo articolo, è necessario Ansible 2.9 (o versione successiva).
Raccolta immagini condivise è un servizio che consente di gestire, condividere e organizzare facilmente immagini gestite in modo personalizzato. Questa funzionalità è utile per scenari in cui vengono gestite e condivise molte immagini. Le immagini personalizzate possono essere condivise tra sottoscrizioni e tra i tenant di Microsoft Entra. Le immagini possono anche essere replicate in più aree, per un ridimensionamento più rapido delle distribuzioni.
In questo articolo vengono illustrate le operazioni seguenti:
- Creare una macchina virtuale generalizzata e un'immagine personalizzata
- Creare una Raccolta immagini condivise
- Creare un'immagine condivisa e una versione dell'immagine
- Creare una VM con l'immagine generalizzata
- Creare un set di scalabilità di macchine virtuali con l'immagine generalizzata
- Ottenere informazioni sulla Raccolta immagini condivise, sull'immagine e sulla versione.
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Installare Ansible: eseguire una delle opzioni seguenti:
- Installare e configurare Ansible in una macchina virtuale Linux
- Configurare Azure Cloud Shell e, se non si ha accesso a una macchina virtuale Linux, creare una macchina virtuale con Ansible.
Ottenere i playbook di esempio
È possibile ottenere il set completo di playbook di esempio in due modi:
- Scaricare la cartella SIG e salvarla nel computer locale.
- Creare un nuovo file per ogni sezione e copiarvi il playbook di esempio.
Il file vars.yml
contiene le variabili usate da tutti i playbook di esempio di questa esercitazione. È possibile modificare il file per fornire nomi e valori univoci.
Il primo playbook di esempio 00-prerequisites.yml
crea gli elementi necessari per completare questa esercitazione:
- Un gruppo di risorse, ovvero un contenitore logico in cui vengono distribuite e gestite le risorse di Azure.
- Una rete virtuale, una subnet, un indirizzo IP pubblico e una scheda di interfaccia di rete per la VM.
- Una macchina virtuale di origine, che viene usata per creare l'immagine generalizzata.
- 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
Eseguire il playbook con ansible-playbook
ansible-playbook 00-prerequisites.yml
Nel portale di Azure verificare il gruppo di risorse specificato in vars.yml
per visualizzare la nuova macchina virtuale e le varie risorse create.
Generalizzare la VM e creare un'immagine personalizzata
Il playbook successivo, 01a-create-generalized-image.yml
, generalizza la VM di origine creata nel passaggio precedente e quindi crea un'immagine personalizzata basata su di essa.
- 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 }}"
Eseguire il playbook con ansible-playbook
ansible-playbook 01a-create-generalized-image.yml
Verificare il gruppo di risorse e assicurarsi che venga visualizzato testimagea
.
Creare la Raccolta immagini condivise
La raccolta immagini è il repository per la condivisione e la gestione delle immagini. Il codice del playbook di esempio in 02-create-shared-image-gallery.yml
crea una Raccolta immagini condivise nel gruppo di risorse.
- 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.
Eseguire il playbook con ansible-playbook
ansible-playbook 02-create-shared-image-gallery.yml
Viene ora visualizzata una nuova raccolta, myGallery
, nel gruppo di risorse.
Creare un'immagine condivisa e una versione dell'immagine
Il playbook successivo, 03a-create-shared-image-generalized.yml
, crea una definizione dell'immagine e una versione dell'immagine.
Le definizioni delle immagini includono il tipo di immagine (Windows o Linux), le note sulla versione e i requisiti minimi e massimi di memoria. La versione dell'immagine è la versione dell'immagine. La raccolta, la definizione dell'immagine e la versione dell'immagine consentono di organizzare le immagini in gruppi logici.
- 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
Eseguire il playbook con ansible-playbook
ansible-playbook 03a-create-shared-image-generalized.yml
Il gruppo di risorse contiene ora una definizione dell'immagine e una versione dell'immagine per la raccolta.
Creare una VM in base all'immagine generalizzata
Infine, eseguire 04a-create-vm-using-generalized-image.yml
per creare una VM in base all'immagine generalizzata creata nel passaggio precedente.
- 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 }}"
Eseguire il playbook con ansible-playbook
ansible-playbook 04a-create-vm-using-generalized-image.yml
Creare un set di scalabilità di macchine virtuali in base all'immagine generalizzata
È anche possibile creare un set di scalabilità di macchine virtuali in base all'immagine generalizzata. A tale scopo, eseguire 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 }}"
Eseguire il playbook con ansible-playbook
ansible-playbook 05a-create-vmss-using-generalized-image.yml
Ottenere informazioni sulla raccolta
È possibile ottenere informazioni sulla raccolta, la definizione dell'immagine e la versione eseguendo 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 }}"
Eseguire il playbook con ansible-playbook
ansible-playbook 06-get-info.yml
Eliminare l'immagine condivisa
Per eliminare le risorse della raccolta, vedere il playbook di esempio 07-delete-gallery.yml
. Eliminare le risorse nell'ordine inverso. Iniziare a eliminare la versione dell'immagine. Dopo aver eliminato tutte le versioni dell'immagine, è possibile eliminare la definizione dell'immagine. Dopo aver eliminato tutte le definizioni dell'immagine, è possibile eliminare la raccolta.
- 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
Eseguire il playbook con ansible-playbook
ansible-playbook 07-delete-gallery.yml
Pulire le risorse
Salvare il codice seguente come
delete_rg.yml
.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Eseguire il playbook usando il comando ansible-playbook. Sostituire il segnaposto con il nome del gruppo di risorse da eliminare. Tutte le risorse presenti nel gruppo di risorse verranno eliminate.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Punti principali:
- A causa della variabile e
debug
dellaregister
sezione del playbook, i risultati vengono visualizzati al termine del comando.
- A causa della variabile e