Tutorial: Creación de una máquina virtual o un conjunto de escalado de máquinas virtuales desde Azure Shared Image Gallery mediante Ansible
Importante
Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.9 (o versiones posteriores).
Azure Shared Image Gallery es un servicio que le permite administrar, compartir y organizar fácilmente imágenes administradas de forma personalizada. Esta característica es útil para escenarios en los que se mantienen y comparten muchas imágenes. Las imágenes personalizadas se pueden compartir entre suscripciones y entre inquilinos de Microsoft Entra. Las imágenes también se pueden replicar en varias regiones para un escalado más rápido de las implementaciones.
En este artículo aprenderá a:
- Creación de una máquina virtual generalizada y una imagen personalizada
- Creación de una instancia de Shared Image Gallery
- Creación de una versión de imagen y de una imagen compartida
- Creación de una máquina virtual con la imagen generalizada
- Creación de un conjunto de escalado de máquinas virtuales con la imagen generalizada
- Obtenga información sobre Shared Image Gallery, la imagen y la versión.
Requisitos previos
- Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Instalación de Ansible: realice una de las siguientes opciones:
- Instalar y configurar Ansible en una máquina virtual Linux
- Configurar Azure Cloud Shell y, si no tiene acceso a una máquina virtual Linux, crear una máquina virtual con Ansible.
Obtención de los cuadernos de estrategias de ejemplo
Hay dos formas de obtener el conjunto completo de cuadernos de estrategias de ejemplo:
- Descargue la carpeta SIG y guárdela en la máquina local.
- Cree un nuevo archivo para cada sección y copie el cuaderno de estrategias de ejemplo en él.
El archivo vars.yml
contiene las variables usadas por todos los cuadernos de estrategias de ejemplo de este tutorial. Puede editar el archivo para proporcionar nombres y valores únicos.
El primer cuaderno de estrategias de ejemplo 00-prerequisites.yml
crea lo que es necesario para completar este tutorial:
- Un grupo de recursos, que es un contenedor lógico en el que se implementan y se administran los recursos de Azure.
- Una red virtual, subred, dirección IP pública y tarjeta de interfaz de red para la máquina virtual.
- Una máquina virtual de origen, que se usa para crear la imagen generalizada.
- 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 interface 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
Ejecute el cuaderno de estrategias mediante ansible-playbook.
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ó.
Generalización de la máquina virtual y creación de una imagen personalizada
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.
- 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 }}"
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook 01a-create-generalized-image.yml
Compruebe el grupo de recursos y asegúrese de que aparece testimagea
.
Creación de la instancia de Shared Image Gallery
La galería de imágenes es el repositorio para compartir y administrar las imágenes. 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.
- 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.
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook 02-create-shared-image-gallery.yml
Ahora verá una nueva galería, myGallery
, en el grupo de recursos.
Creación de una versión de imagen y de una imagen compartida
El siguiente cuaderno de estrategias, 03a-create-shared-image-generalized.yml
, crea una definición de imagen y una versión de imagen.
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. La versión es la de la imagen. 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.
- 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
Ejecute el cuaderno de estrategias mediante ansible-playbook.
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.
Creación de una máquina virtual basada en la imagen generalizada
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.
- 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 }}"
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook 04a-create-vm-using-generalized-image.yml
Creación de un conjunto de escalado de máquinas virtuales basada en la imagen generalizada
También puede crear un conjunto de escalado de máquinas virtuales basado en la imagen generalizada. Para ello, ejecute 05a-create-vmss-using-generalized-image.yml
.
- 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 }}"
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook 05a-create-vmss-using-generalized-image.yml
Obtención de información acerca de la galería
Puede obtener información sobre la galería, la definición de la imagen y la versión si ejecuta 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 }}"
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook 06-get-info.yml
Eliminación de la imagen compartida
Para eliminar los recursos de la galería, consulte el cuaderno de estrategias 07-delete-gallery.yml
de ejemplo. Elimine los recursos en orden inverso. Empiece por eliminar la versión de la imagen. Después de eliminar todas las versiones de imagen, puede eliminar la definición de imagen. Después de eliminar todas las definiciones de imagen, puede eliminar la galería.
- 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
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook 07-delete-gallery.yml
Limpieza de recursos
Guarde el código siguiente como
delete_rg.yml
.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Ejecute el cuaderno de estrategias mediante el comando ansible-playbook. Reemplace el marcador de posición por el nombre del grupo de recursos que se va a eliminar. Se eliminarán todos los recursos del grupo de recursos.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Puntos clave:
- Debido a la variable
register
y a la seccióndebug
del cuaderno de estrategias, los resultados se muestran cuando finaliza el comando.
- Debido a la variable