Delen via


Zelfstudie: Een VM of virtuele-machineschaalset maken vanuit de galerie met gedeelde installatiekopieën van Azure met behulp van Ansible

Belangrijk

Ansible 2.9 (of hoger) is vereist om de voorbeeldplaybooks in dit artikel uit te voeren.

Shared Image Gallery is een service waarmee u eenvoudig aangepaste beheerde installatiekopieën kunt beheren, delen en organiseren. Deze functie is nuttig voor scenario's waarin veel afbeeldingen worden onderhouden en gedeeld. Aangepaste installatiekopieën kunnen worden gedeeld tussen abonnementen en tussen Microsoft Entra-tenants. Installatiekopieën kunnen ook worden gerepliceerd naar meerdere regio's voor snellere schaalaanpassing van implementaties.

In dit artikel leert u het volgende:

  • Een gegeneraliseerde VM en aangepaste installatiekopieën maken
  • Een gedeelde installatiekopiegalerie maken
  • Een gedeelde installatiekopieën en versie van installatiekopieën maken
  • Een virtuele machine maken met behulp van de gegeneraliseerde installatiekopieën
  • Een virtuele-machineschaalset maken met behulp van de gegeneraliseerde installatiekopieën
  • Informatie ophalen over de galerie met gedeelde installatiekopieën, installatiekopieën en versies.

Vereisten

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

De voorbeeldplaybooks ophalen

Er zijn twee manieren om de volledige set voorbeeldplaybooks op te halen:

  • Download de SIG-map en sla deze op uw lokale computer op.
  • Maak een nieuw bestand voor elke sectie en kopieer het voorbeeldplaybook erin.

Het vars.yml bestand bevat de variabelen die worden gebruikt door alle voorbeeldplaybooks voor deze zelfstudie. U kunt het bestand bewerken om unieke namen en waarden op te geven.

In het eerste voorbeeldplaybook 00-prerequisites.yml wordt gemaakt wat nodig is om deze zelfstudie te voltooien:

  • Een resourcegroep, een logische container waarin Azure-resources worden geïmplementeerd en beheerd.
  • Een virtueel netwerk; Subnet; openbaar IP-adres en netwerkinterfacekaart voor de virtuele machine.
  • Een virtuele bronmachine, die wordt gebruikt voor het maken van de gegeneraliseerde installatiekopieën.
- 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

Het playbook uitvoeren met ansible-playbook

ansible-playbook 00-prerequisites.yml

Controleer in Azure Portal de resourcegroep die u hebt vars.yml opgegeven om de nieuwe virtuele machine en de verschillende resources te zien die u hebt gemaakt.

De VIRTUELE machine generaliseren en een aangepaste installatiekopieën maken

In het volgende playbook 01a-create-generalized-image.ymlgeneraliseert u de bron-VM die u in de vorige stap hebt gemaakt en maakt u vervolgens een aangepaste installatiekopieën op basis daarvan.

- 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 }}"

Het playbook uitvoeren met ansible-playbook

ansible-playbook 01a-create-generalized-image.yml

Controleer uw resourcegroep en controleer of testimagea deze wordt weergegeven.

De galerie met installatiekopieën is de opslagplaats voor het delen en beheren van afbeeldingen. Met de voorbeeldplaybookcode in 02-create-shared-image-gallery.yml de resourcegroep wordt een galerie met gedeelde installatiekopieën gemaakt.

- 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.

Het playbook uitvoeren met ansible-playbook

ansible-playbook 02-create-shared-image-gallery.yml

U ziet nu een nieuwe galerie in myGalleryuw resourcegroep.

Een gedeelde installatiekopieën en versie van installatiekopieën maken

In het volgende playbook 03a-create-shared-image-generalized.yml maakt u een definitie van een installatiekopieën en een versie van de installatiekopieën.

Definities van installatiekopieën bevatten het installatiekopietype (Windows of Linux), opmerkingen bij de release en minimale en maximale geheugenvereisten. De versie van de installatiekopieën is de versie van de installatiekopieën. Met galerie, definitie van installatiekopieën en installatiekopieën kunt u afbeeldingen ordenen in logische groepen.

- 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

Het playbook uitvoeren met ansible-playbook

ansible-playbook 03a-create-shared-image-generalized.yml

Uw resourcegroep heeft nu een definitie van een installatiekopieën en een installatiekopieënversie voor uw galerie.

Een VIRTUELE machine maken op basis van de gegeneraliseerde installatiekopieën

Voer ten slotte uit 04a-create-vm-using-generalized-image.yml om een virtuele machine te maken op basis van de gegeneraliseerde installatiekopieën die u in de vorige stap hebt gemaakt.

- 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 }}"

Het playbook uitvoeren met ansible-playbook

ansible-playbook 04a-create-vm-using-generalized-image.yml

Een virtuele-machineschaalset maken op basis van de gegeneraliseerde installatiekopieën

U kunt ook een virtuele-machineschaalset maken op basis van de gegeneraliseerde installatiekopieën. Voer 05a-create-vmss-using-generalized-image.yml dit uit.

- 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 }}"

Het playbook uitvoeren met ansible-playbook

ansible-playbook 05a-create-vmss-using-generalized-image.yml

U kunt informatie krijgen over de galerie, de definitie van de installatiekopieën en de versie door deze uit te voeren 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 }}"

Het playbook uitvoeren met ansible-playbook

ansible-playbook 06-get-info.yml

De gedeelde installatiekopieën verwijderen

Als u de galeriebronnen wilt verwijderen, raadpleegt u het voorbeeldplaybook 07-delete-gallery.yml. Resources in omgekeerde volgorde verwijderen. Begin met het verwijderen van de versie van de installatiekopieën. Nadat u alle installatiekopieën hebt verwijderd, kunt u de definitie van de installatiekopieën verwijderen. Nadat u alle installatiekopieën hebt verwijderd, kunt u de galerie verwijderen.

- 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

Het playbook uitvoeren met ansible-playbook

ansible-playbook 07-delete-gallery.yml

Resources opschonen

  1. Sla de volgende code op als delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Voer het playbook uit met behulp van de ansible-playbook-opdracht . Vervang de tijdelijke aanduiding door de naam van de resourcegroep die u wilt verwijderen. Alle resources in de resourcegroep worden verwijderd.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    Belangrijkste punten:

    • Vanwege de register variabele en debug sectie van het playbook worden de resultaten weergegeven wanneer de opdracht is voltooid.

Volgende stappen