Lernprogramm: Erstellen eines VM- oder vm-Skalierungssatzes aus der Azure Shared Image Gallery mithilfe von Ansible
Wichtig
Für die Ausführung der Beispielplaybooks in diesem Artikel ist mindestens Ansible 2.9 erforderlich.
Die Shared Image Gallery ist ein Dienst, der Ihnen das einfache Verwalten, gemeinsame Nutzen und Organisieren von benutzerdefinierten Images ermöglicht. Dieses Feature eignet sich gut für Szenarien, bei denen viele Images verwaltet und gemeinsam genutzt werden. Benutzerdefinierte Bilder können für Abonnements und zwischen Microsoft Entra-Mandanten freigegeben werden. Darüber hinaus können Images auch in mehreren Regionen repliziert werden, um eine schnellere Bereitstellungsskalierung zu erzielen.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Erstellen einer generalisierten VM und eines benutzerdefinierten Images
- Erstellen einer Shared Image Gallery-Instanz
- Erstellen eines gemeinsam genutzten Images und einer Imageversion
- Erstellen einer VM mit dem generalisierten Image
- Erstellen einer VM-Skalierungsgruppe mit dem generalisierten Image
- Abrufen von Informationen zu Ihrer Shared Image Gallery, zum Image und zur Version
Voraussetzungen
- Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Installieren von Ansible: Verwenden Sie eine der folgenden Optionen:
- Installieren und Konfigurieren von Ansible auf einem virtuellen Linux-Computer
- Konfigurieren Sie Azure Cloud Shell. Sollten Sie keinen Zugriff auf einen virtuellen Linux-Computer haben, können Sie mit Ansible einen virtuellen Computer erstellen.
Beschaffen der Beispielplaybooks
Es gibt zwei Arten, wie die gesamten Beispielplaybooks beschafft werden können:
- Laden Sie den SIG-Ordner herunter, und speichern Sie ihn auf Ihrem lokalen Computer.
- Erstellen Sie für jeden Abschnitt eine neue Datei, und kopieren Sie das Beispielplaybook in die Datei.
Die Datei vars.yml
enthält die Variablen, die von allen Beispielplaybooks für dieses Tutorial verwendet werden. Sie können die Datei bearbeiten, um eindeutige Namen und Werte anzugeben.
Mit dem ersten Playbook 00-prerequisites.yml
werden die Komponenten erstellt, die für dieses Tutorial erforderlich sind:
- Eine Ressourcengruppe: Dies ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden.
- Ein virtuelles Netzwerk, ein Subnetz, eine öffentliche IP-Adresse und eine Netzwerkschnittstellenkarte für den virtuellen Computer.
- Ein virtueller Quellcomputer, der zum Erstellen des generalisierten Images verwendet wird.
- 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 inteface 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
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 00-prerequisites.yml
Überprüfen Sie im Azure-Portal die Ressourcengruppe, die Sie in vars.yml
angegeben haben, um den neuen virtuellen Computer und die von Ihnen erstellten Ressourcen anzuzeigen.
Generalisieren der VM und Erstellen eines benutzerdefinierten Images
Mit dem nächsten Playbook (01a-create-generalized-image.yml
) wird die im vorherigen Schritt erstellte VM generalisiert, und anschließend wird basierend darauf ein benutzerdefiniertes Image erstellt.
- 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 }}"
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 01a-create-generalized-image.yml
Überprüfen Sie Ihre Ressourcengruppe, und stellen Sie sicher, dass testimagea
angezeigt wird.
Erstellen der Shared Image Gallery-Instanz
Die Image Gallery ist das Repository zum gemeinsamen Nutzen und Verwalten von Images. Mit dem Code des Beispielplaybooks in 02-create-shared-image-gallery.yml
wird in Ihrer Ressourcengruppe eine Shared Image Gallery-Instanz erstellt.
- 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.
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 02-create-shared-image-gallery.yml
In Ihrer Ressourcengruppe wird jetzt der neue Katalog myGallery
angezeigt.
Erstellen eines gemeinsam genutzten Images und einer Imageversion
Mit dem nächsten Playbook (03a-create-shared-image-generalized.yml
) werden eine Imagedefinition und -version erstellt.
Imagedefinitionen enthalten den Imagetyp (Windows oder Linux), Versionshinweise und die Anforderungen in Bezug auf den minimalen und maximalen Arbeitsspeicher. Wie der Name schon sagt, ist die Imageversion die Version des Images. Mit der Gallery, der Imagedefinition und der Imageversion können Sie Images in logischen Gruppen organisieren.
- 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
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 03a-create-shared-image-generalized.yml
Ihre Ressourcengruppe verfügt nun über eine Imagedefinition und -version für Ihre Gallery.
Erstellen einer VM basierend auf dem generalisierten Image
Führen Sie abschließend 04a-create-vm-using-generalized-image.yml
aus, um eine VM basierend auf dem generalisierten Image zu erstellen, das Sie im vorherigen Schritt erstellt haben.
- 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 }}"
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 04a-create-vm-using-generalized-image.yml
Erstellen einer VM-Skalierungsgruppe basierend auf dem generalisierten Image
Sie können basierend auf dem generalisierten Image auch eine VM-Skalierungsgruppe erstellen. Führen Sie hierzu 05a-create-vmss-using-generalized-image.yml
aus.
- 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 }}"
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 05a-create-vmss-using-generalized-image.yml
Abrufen von Informationen zur Gallery
Sie können Informationen zur Gallery und zur Imagedefinition und -version abrufen, indem Sie 06-get-info.yml
ausführen.
- 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 }}"
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 06-get-info.yml
Löschen des gemeinsam genutzten Images
Informationen zum Löschen der Gallery-Ressourcen finden Sie im Beispielplaybook 07-delete-gallery.yml
. Löschen Sie die Ressourcen in umgekehrter Reihenfolge. Löschen Sie zunächst die Imageversion. Nachdem alle Imageversionen gelöscht sind, können Sie die Imagedefinition löschen. Nachdem alle Imagedefinitionen gelöscht sind, können Sie den Katalog löschen.
- 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
Führen Sie das Playbook mithilfe von ansible-playbook aus.
ansible-playbook 07-delete-gallery.yml
Bereinigen von Ressourcen
Speichern Sie den folgenden Code als
delete_rg.yml
.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Führen Sie das Playbook mithilfe des Befehls ansible-playbook aus. Ersetzen Sie den Platzhalter durch den Namen der zu löschenden Ressourcengruppe. Alle Ressourcen innerhalb der Ressourcengruppe werden gelöscht.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Die wichtigsten Punkte:
- Aufgrund der Variablen
register
und des Abschnittsdebug
des Playbooks werden die Ergebnisse angezeigt, wenn der Befehl abgeschlossen ist.
- Aufgrund der Variablen