Dela via


Självstudie: Skapa en VM- eller VM-skalningsuppsättning från Azure Shared Image Gallery med Ansible

Viktigt!

Ansible 2.9 (eller senare) krävs för att köra exempelspelböckerna i den här artikeln.

Delat bildgalleri är en tjänst som gör att du enkelt kan hantera, dela och organisera anpassade hanterade avbildningar. Den här funktionen är fördelaktig för scenarier där många bilder underhålls och delas. Anpassade avbildningar kan delas mellan prenumerationer och mellan Microsoft Entra-klienter. Avbildningar kan också replikeras till flera regioner för snabbare distributionsskalning.

I den här artikeln kan du se hur du:

  • Skapa en generaliserad virtuell dator och anpassad avbildning
  • Skapa ett Shared Image Gallery
  • Skapa en delad avbildning och avbildningsversion
  • Skapa en virtuell dator med den generaliserade avbildningen
  • Skapa en VM-skalningsuppsättning med hjälp av den generaliserade avbildningen
  • Hämta information om ditt delade bildgalleri, bild och version.

Förutsättningar

  • Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

Hämta exempelspelböckerna

Det finns två sätt att hämta den fullständiga uppsättningen exempelspelböcker:

  • Ladda ned SIG-mappen och spara den på den lokala datorn.
  • Skapa en ny fil för varje avsnitt och kopiera exempelspelboken i den.

Filen vars.yml innehåller variablerna som används av alla exempelspelböcker för den här självstudien. Du kan redigera filen för att ange unika namn och värden.

Den första exempelspelboken 00-prerequisites.yml skapar det som krävs för att slutföra den här självstudien:

  • En resursgrupp, som är en logisk container där Azure-resurser distribueras och hanteras.
  • Ett virtuellt nätverk; Undernät; offentlig IP-adress och nätverkskort för den virtuella datorn.
  • En virtuell källdator som används för att skapa den generaliserade avbildningen.
- 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

Kör spelboken med ansible-playbook

ansible-playbook 00-prerequisites.yml

I Azure-portalen kontrollerar du den resursgrupp som du angav i vars.yml för att se den nya virtuella datorn och olika resurser som du skapade.

Generalisera den virtuella datorn och skapa en anpassad avbildning

Nästa spelbok, 01a-create-generalized-image.yml, generaliserar den virtuella källdatorn som skapades i föregående steg och skapar sedan en anpassad avbildning baserat på den.

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

Kör spelboken med ansible-playbook

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

Kontrollera resursgruppen och se till att testimagea den visas.

Bildgalleriet är lagringsplatsen för delning och hantering av bilder. Exempelspelbokskoden i 02-create-shared-image-gallery.yml skapar ett delat bildgalleri i resursgruppen.

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

Kör spelboken med ansible-playbook

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

Nu visas ett nytt galleri, myGallery, i resursgruppen.

Skapa en delad avbildning och avbildningsversion

Nästa spelbok 03a-create-shared-image-generalized.yml skapar en bilddefinition och en bildversion.

Bilddefinitioner omfattar avbildningstypen (Windows eller Linux), viktig information samt minimikrav och maximalt minne. Avbildningsversionen är avbildningens version. Galleri, bilddefinition och bildversion hjälper dig att organisera bilder i logiska grupper.

- 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

Kör spelboken med ansible-playbook

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

Resursgruppen har nu en bilddefinition och en bildversion för galleriet.

Skapa en virtuell dator baserat på den generaliserade avbildningen

04a-create-vm-using-generalized-image.yml Kör slutligen för att skapa en virtuell dator baserat på den generaliserade avbildning som du skapade i föregående steg.

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

Kör spelboken med ansible-playbook

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

Skapa en VM-skalningsuppsättning baserat på den generaliserade avbildningen

Du kan också skapa en VM-skalningsuppsättning baserat på den generaliserade avbildningen. Kör 05a-create-vmss-using-generalized-image.yml för att göra det.

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

Kör spelboken med ansible-playbook

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

Du kan få information om galleriet, bilddefinitionen och versionen genom att köra 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 }}"

Kör spelboken med ansible-playbook

ansible-playbook 06-get-info.yml

Ta bort den delade avbildningen

Om du vill ta bort galleriresurserna läser du exempelspelboken 07-delete-gallery.yml. Ta bort resurser i omvänd ordning. Börja med att ta bort avbildningsversionen. När du har tagit bort alla avbildningsversioner kan du ta bort bilddefinitionen. När du har tagit bort alla bilddefinitioner kan du ta bort galleriet.

- 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

Kör spelboken med ansible-playbook

ansible-playbook 07-delete-gallery.yml

Rensa resurser

  1. Spara följande kod som delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Kör spelboken med kommandot ansible-playbook . Ersätt platshållaren med namnet på den resursgrupp som ska tas bort. Alla resurser i resursgruppen tas bort.

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

    Viktiga punkter:

    • På grund av variabeln register och debug avsnittet i spelboken visas resultatet när kommandot har slutförts.

Nästa steg