Tutorial: Creación de una máquina virtual o un conjunto de escalado de máquinas virtuales desde Azure Shared Image Gallery mediante AnsibleTutorial: Create a VM or virtual machine scale set from the Azure Shared Image Gallery using Ansible

Importante

La versión pública de Ansible 2.9 está programada para noviembre de 2019.Ansible 2.9 is scheduled for public release in Nov 2019. Para ejecutar los cuadernos de estrategias de ejemplo de este artículo antes del lanzamiento de Ansible 2.9, instale el rol del cuaderno de estrategias azure_preview_moduleTo run the sample playbooks in this article before Ansible 2.9 is released, install the azure_preview_module playbook role

Azure Shared Image Gallery es un servicio que le permite administrar, compartir y organizar fácilmente imágenes administradas de forma personalizada.Shared Image Gallery is a service that allows you to manage, share, and organize custom-managed images easily. Esta característica es útil para escenarios en los que se mantienen y comparten muchas imágenes.This feature is beneficial for scenarios where many images are maintained and shared. Las imágenes personalizadas se pueden compartir entre las suscripciones y los inquilinos de Azure Active Directory.Custom images can be shared across subscriptions and between Azure Active Directory tenants. Las imágenes también se pueden replicar en varias regiones para un escalado más rápido de las implementaciones.Images can also be replicated to multiple regions for quicker deployment scaling.

En este tutorial, se usa Ansible para:In this tutorial, Ansible is used to:

  • Creación de una máquina virtual generalizada y una imagen personalizadaCreate a generalized VM and custom image
  • Creación de una instancia de Shared Image GalleryCreate a Shared Image Gallery
  • Creación de una versión de imagen y de una imagen compartidaCreate a shared image and image version
  • Creación de una máquina virtual con la imagen generalizadaCreate a VM using the generalized image
  • Creación de un conjunto de escalado de máquinas virtuales con la imagen generalizadaCreate a virtual machine scale set using the generalized image
  • Obtenga información sobre Shared Image Gallery, la imagen y la versión.Get information about your Shared Image Gallery, image and version.

Requisitos previosPrerequisites

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

Obtención de los cuadernos de estrategias de ejemploGet the sample playbooks

Hay dos formas de obtener el conjunto completo de cuadernos de estrategias de ejemplo:There are two ways to get the complete set of sample playbooks:

  • Descargue la carpeta SIG y guárdela en la máquina local.Download the SIG folder and save it to your local machine.
  • Cree un nuevo archivo para cada sección y copie el cuaderno de estrategias de ejemplo en él.Create a new file for each section and copy the sample playbook in it.

El archivo vars.yml contiene las variables usadas por todos los cuadernos de estrategias de ejemplo de este tutorial.The vars.yml file contains the variables used by all sample playbooks for this tutorial. Puede editar el archivo para proporcionar nombres y valores únicos.You can edit the file to provide unique names and values.

El primer cuaderno de estrategias de ejemplo 00-prerequisites.yml crea lo que es necesario para completar este tutorial:The first sample playbook 00-prerequisites.yml creates what's necessary to complete this tutorial:

  • Un grupo de recursos, que es un contenedor lógico en el que se implementan y se administran los recursos de Azure.A resource group, which is a logical container in which Azure resources are deployed and managed.
  • Una red virtual, subred, dirección IP pública y tarjeta de interfaz de red para la máquina virtual.A virtual network; subnet; public IP address and network interface card for the VM.
  • Una máquina virtual de origen, que se usa para crear la imagen generalizada.A source Virtual Machine, which is used for creating the generalized image.
- 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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook 00-prerequisites.yml

En Azure Portal, compruebe el grupo de recursos que especificó en vars.yml para ver la nueva máquina virtual y los distintos recursos que creó.In the Azure portal, check the resource group you specified in vars.yml to see the new virtual machine and various resources you created.

Generalización de la máquina virtual y creación de una imagen personalizadaGeneralize the VM and create a custom image

En el siguiente cuaderno de estrategias, 01a-create-generalized-image.yml, se generaliza la máquina virtual de origen creada en el paso anterior y, a continuación, se crea una imagen personalizada basada en ella.The next playbook, 01a-create-generalized-image.yml, generalizes the source VM created in previous step and then create a custom image based on it.

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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

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

Compruebe el grupo de recursos y asegúrese de que aparece testimagea.Check your resource group and make sure testimagea shows up.

La galería de imágenes es el repositorio para compartir y administrar las imágenes.The image gallery is the repository for sharing and managing images. El código del cuaderno de estrategias de ejemplo de 02-create-shared-image-gallery.yml crea una instancia de Shared Image Gallery en el grupo de recursos.The sample playbook code in 02-create-shared-image-gallery.yml creates a Shared Image Gallery in your resource group.

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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

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

Ahora verá una nueva galería, myGallery, en el grupo de recursos.You now see a new gallery, myGallery, in your resource group.

Creación de una versión de imagen y de una imagen compartidaCreate a shared image and image version

El siguiente cuaderno de estrategias, 03a-create-shared-image-generalized.yml, crea una definición de imagen y una versión de imagen.The next playbook, 03a-create-shared-image-generalized.yml creates an image definition and an image version.

Las definiciones de imagen incluyen el tipo de imagen (Windows o Linux), notas de la versión y los requisitos de memoria mínima y máxima.Image definitions include the image type (Windows or Linux), release notes, and minimum and maximum memory requirements. La versión es la de la imagen.Image version is the version of the image. La galería, la definición de imagen y la versión de la imagen le ayudan a organizar las imágenes en grupos lógicos.Gallery, image definition, and image version help you organize images in logical groups.

- 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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

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

Ahora el grupo de recursos tiene una definición de imagen y una versión de imagen para la galería.Your resource group now have an image definition and an image version for your gallery.

Creación de una máquina virtual basada en la imagen generalizadaCreate a VM based on the generalized image

Por último, ejecute 04a-create-vm-using-generalized-image.yml para crear una máquina virtual basada en la imagen generalizada que creó en el paso anterior.Finally, run 04a-create-vm-using-generalized-image.yml to create a VM based on the generalized image you created in previous step.

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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

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

Creación de un conjunto de escalado de máquinas virtuales basada en la imagen generalizadaCreate a virtual machine scale sets based on the generalized image

También puede crear un conjunto de escalado de máquinas virtuales basado en la imagen generalizada.You can also create a virtual machine scale set based on the generalized image. Para ello, ejecute 05a-create-vmss-using-generalized-image.yml.Run 05a-create-vmss-using-generalized-image.yml to do so.

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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

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

Puede obtener información sobre la galería, la definición de la imagen y la versión si ejecuta 06-get-info.yml.You can get information about the gallery, image definition, and version by running 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 }}"

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook 06-get-info.yml

Eliminación de la imagen compartidaDelete the shared image

Para eliminar los recursos de la galería, consulte el cuaderno de estrategias 07-delete-gallery.yml de ejemplo.To delete the gallery resources, refer to sample playbook 07-delete-gallery.yml. Elimine los recursos en orden inverso.Delete resources in reverse order. Empiece por eliminar la versión de la imagen.Start by deleting the image version. Después de eliminar todas las versiones de imagen, puede eliminar la definición de imagen.After you delete all of the image versions, you can delete the image definition. Después de eliminar todas las definiciones de imagen, puede eliminar la galería.After you delete all image definitions, you can delete the gallery.

- 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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook 07-delete-gallery.yml

Limpieza de recursosClean up resources

Cuando ya no los necesite, elimine los recursos creados en este artículo.When no longer needed, delete the resources created in this article.

El código del cuaderno de estrategias de ejemplo de esta sección se utiliza para lo siguiente:The sample playbook code in this section is used to:

  • Eliminar los dos grupos de recursos creados anteriormente.Delete the two resources groups created earlier

Guarde el siguiente cuaderno de estrategias como cleanup.yml:Save the following playbook as cleanup.yml:

- hosts: localhost
  vars:
    resource_group: "{{ resource_group_name }}"
  tasks:
    - name: Delete a resource group
      azure_rm_resourcegroup:
        name: "{{ resource_group }}"
        force_delete_nonempty: yes
        state: absent

Estas son algunas notas claves que se deben tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:Here are some key notes to consider when working with the sample playbook:

  • Reemplace el marcador de posición {{ resource_group_name }} por el nombre del grupo de recursos.Replace the {{ resource_group_name }} placeholder with the name of your resource group.
  • Se eliminarán todos los recursos de los dos grupos de recursos especificados.All resources within the two specified resource groups will be deleted.

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook cleanup.yml

Pasos siguientesNext steps