Tutorial: Buat vm atau set skala komputer virtual dari Azure Shared Image Gallery menggunakan Ansible

Penting

Ansible 2.9 (atau lebih baru) diperlukan untuk menjalankan sampel playbook dalam artikel ini.

Shared Image Gallery adalah layanan yang memungkinkan Anda mengelola, berbagi, dan mengatur gambar yang dikelola khusus dengan mudah. Fitur ini bermanfaat untuk pada saat di mana banyak gambar dipertahankan dan dibagikan. Gambar kustom dapat dibagikan di seluruh langganan dan antara penyewa Microsoft Entra. Gambar juga dapat direplikasi ke beberapa wilayah untuk penskalaan penyebaran yang lebih cepat.

Dalam artikel ini, Anda akan mempelajari cara:

  • Membuat VM umum dan gambar kustom
  • Membuat Shared Image Gallery
  • Membuat versi gambar dan gambar bersama
  • Membuat VM menggunakan citra umum
  • Membuat set skala komputer virtual menggunakan gambar umum
  • Dapatkan informasi tentang Shared Image Gallery, gambar, dan versi Anda.

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.

Dapatkan sampel playbook

Ada dua cara untuk mendapatkan playbook sampel lengkap:

  • Download folder SIG dan simpan ke mesin lokal anda.
  • Buat file baru untuk setiap bagian dan salin sampel playbook di dalamnya.

File vars.yml berisi variabel yang digunakan oleh semua playbook sampel untuk tutorial ini. Anda dapat mengedit file untuk memberikan nama dan nilai unik.

sampel playbook pertama 00-prerequisites.yml membuat apa yang diperlukan untuk menyelesaikan tutorial ini:

  • Grup sumber daya, yang mana adalah kontainer logis yang disebarkan dan dikelola oleh sumber daya Azure.
  • Jaringan virtual; subnet; alamat IP publik dan kartu antarmuka jaringan untuk VM.
  • Mesin Virtual sumber, yang digunakan untuk membuat gambar umum.
- 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

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook 00-prerequisites.yml

Di portal Azure, periksa grup sumber daya yang Anda tentukan di vars.yml untuk melihat mesin virtual baru dan berbagai sumber daya yang Anda buat.

Menggeneralisasi VM dan membuat gambar kustom

Playbook berikutnya, 01a-create-generalized-image.yml, menggeneralisasi VM sumber yang dibuat pada langkah sebelumnya dan kemudian membuat gambar kustom berdasarkan itu.

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

Jalankan playbook menggunakan ansible-playbook.

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

Periksa grup sumber daya Anda dan pastikan testimagea muncul.

Galeri gambar adalah repositori untuk berbagi dan mengelola gambar. Contoh kode playbook dalam 02-create-shared-image-gallery.yml membuat Shared Image Gallery di grup sumber daya Anda.

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

Jalankan playbook menggunakan ansible-playbook.

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

Anda sekarang melihat galeri baru, myGallery, di grup sumber daya Anda.

Membuat versi gambar dan gambar bersama

Playbook berikutnya, 03a-create-shared-image-generalized.yml membuat definisi gambar dan versi gambar.

Definisi gambar mencakup jenis gambar (Windows atau Linux), catatan rilis, dan persyaratan memori minimum dan maksimum. Versi gambar adalah versi dari gambar. Galeri, definisi gambar, dan versi gambar membantu Anda mengatur gambar dalam grup logis.

- 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

Jalankan playbook menggunakan ansible-playbook.

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

Grup sumber daya Anda sekarang memiliki definisi gambar dan versi gambar untuk galeri Anda.

Membuat VM berdasarkan gambar umum

Terakhir, jalankan 04a-create-vm-using-generalized-image.yml untuk membuat VM berdasarkan gambar umum yang Anda buat di langkah sebelumnya.

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

Jalankan playbook menggunakan ansible-playbook.

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

Buat set skala komputer virtual berdasarkan gambar umum

Anda juga dapat membuat set skala komputer virtual berdasarkan gambar umum. Jalankan 05a-create-vmss-using-generalized-image.yml untuk melakukannya.

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

Jalankan playbook menggunakan ansible-playbook.

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

Anda bisa mendapatkan informasi tentang galeri, definisi gambar, dan versi dengan menjalankan 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 }}"

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook 06-get-info.yml

Menghapus gambar bersama

Untuk menghapus sumber daya galeri, lihat sampel playbook 07-delete-gallery.yml. Hapus sumber daya dalam urutan terbalik. Mulailah dengan menghapus versi gambar. Setelah menghapus semua versi gambar, Anda dapat menghapus definisi gambar. Setelah menghapus semua definisi gambar, Anda dapat menghapus galeri.

- 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

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook 07-delete-gallery.yml

Membersihkan sumber daya

  1. Simpan kode berikut sebagai delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Jalankan playbook menggunakan perintah ansible-playbook. Ganti tempat penampung dengan nama grup sumber daya yang akan dihapus. Semua sumber daya dalam grup sumber daya akan dihapus.

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

    Poin utama:

    • Karena variabel register dan bagian debug dari playbook, hasilnya akan ditampilkan ketika perintah selesai.

Langkah berikutnya