Tutorial: Criar um conjunto de dimensionamento de VM ou máquina virtual a partir da Galeria de Imagens Compartilhadas do Azure usando o Ansible
Importante
O Ansible 2.9 (ou posterior) é necessário para executar os guias estratégicos de exemplo deste artigo.
A Galeria de Imagens Compartilhadas é um serviço que permite que você gerencie, compartilhe e organize imagens gerenciadas personalizadas facilmente. Esse recurso é benéfico para cenários em que muitas imagens são mantidas e compartilhadas. As imagens personalizadas podem ser compartilhadas entre assinaturas e entre locatários do Microsoft Entra. As imagens também podem ser replicadas em várias regiões para acelerar o dimensionamento da implantação.
Neste artigo, você aprenderá como:
- Criar uma VM generalizada e uma imagem personalizada
- Criar uma Galeria de Imagens Compartilhadas
- Criar uma imagem compartilhada e uma versão da imagem
- Criar uma VM usando uma imagem generalizada
- Criar um conjunto de dimensionamento de máquinas virtuais usando a imagem generalizada
- Obtenha informações sobre a Galeria de Imagens Compartilhadas, a imagem e a versão.
Pré-requisitos
- Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.
Instalar o Ansible: escolha uma das seguintes opções:
- Instalar e configurar o Ansible em uma máquina virtual do Linux
- Configurar o Azure Cloud Shell e, se você não tiver acesso a uma máquina virtual do Linux, criar uma máquina virtual com o Ansible.
Obter os guias estratégicos de exemplo
Há duas maneiras de obter o conjunto completo de guias estratégicos de exemplo:
- Baixe a pasta SIG e salve-a em seu computador local.
- Crie um arquivo para cada seção e copie o guia estratégico de exemplo nela.
O arquivo vars.yml
contém as variáveis usadas por todos os guias estratégicos de exemplo para este tutorial. Você pode editar o arquivo para fornecer nomes e valores exclusivos.
O primeiro guia estratégico de exemplo 00-prerequisites.yml
cria o que é necessário para concluir este tutorial:
- Um grupo de recursos, que é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados.
- Uma rede virtual; uma sub-rede; um endereço IP público e uma placa de adaptador de rede para a VM.
- Uma Máquina Virtual de origem, usada para criar a imagem 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
Executar o guia estratégico usando ansible-playbook
ansible-playbook 00-prerequisites.yml
No portal do Azure, verifique o grupo de recursos que você especificou em vars.yml
para ver a nova máquina virtual e os vários recursos que você criou.
Generalizar a VM e criar uma imagem personalizada
O próximo guia estratégico, 01a-create-generalized-image.yml
, generaliza a VM de origem criada na etapa anterior e cria uma imagem personalizada com base nela.
- 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 }}"
Executar o guia estratégico usando ansible-playbook
ansible-playbook 01a-create-generalized-image.yml
Confira seu grupo de recursos e verifique se testimagea
é exibido.
Criar a Galeria de Imagens Compartilhadas
A galeria de imagens é o repositório para compartilhar e gerenciar imagens. O código do guia estratégico de exemplo no 02-create-shared-image-gallery.yml
cria uma Galeria de Imagens Compartilhadas em seu 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.
Executar o guia estratégico usando ansible-playbook
ansible-playbook 02-create-shared-image-gallery.yml
Agora você verá uma nova galeria, myGallery
, em seu grupo de recursos.
Criar uma imagem compartilhada e uma versão da imagem
O próximo guia estratégico, 03a-create-shared-image-generalized.yml
, cria uma definição e uma versão de imagem.
As definições de imagem incluem o tipo de imagem (Windows ou Linux), notas sobre a versão e requisitos máximos e mínimos de memória. A versão da imagem é a versão da imagem. A galeria, a definição e a versão da imagem ajudam você a organizar imagens em 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
Executar o guia estratégico usando ansible-playbook
ansible-playbook 03a-create-shared-image-generalized.yml
Seu grupo de recursos agora tem uma definição de imagem e uma versão de imagem para sua galeria.
Criar uma VM baseada na imagem generalizada
Por fim, execute 04a-create-vm-using-generalized-image.yml
para criar uma VM com base na imagem generalizada que você criou na etapa 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 }}"
Executar o guia estratégico usando ansible-playbook
ansible-playbook 04a-create-vm-using-generalized-image.yml
Criar Conjuntos de Dimensionamento de Máquinas Virtuais com base na imagem generalizada
Você também pode criar um conjunto de dimensionamento de máquinas virtuais com base na imagem generalizada. Execute 05a-create-vmss-using-generalized-image.yml
para fazer isso.
- 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 }}"
Executar o guia estratégico usando ansible-playbook
ansible-playbook 05a-create-vmss-using-generalized-image.yml
Obter informações sobre a galeria
Você pode obter informações sobre a galeria, a definição de imagem e a versão executando 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 }}"
Executar o guia estratégico usando ansible-playbook
ansible-playbook 06-get-info.yml
Excluir a imagem compartilhada
Para excluir os recursos da galeria, veja o guia estratégico de exemplo 07-delete-gallery.yml
. Excluir recursos em ordem inversa. Comece excluindo a versão da imagem. Após excluir todas as versões da imagem, você poderá excluir a definição da imagem. Após excluir todas as definições da imagem, você poderá excluir a galeria.
- 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
Executar o guia estratégico usando ansible-playbook
ansible-playbook 07-delete-gallery.yml
Limpar os recursos
Salve o código a seguir como
delete_rg.yml
.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Execute o guia estratégico usando o comando ansible-playbook. Substitua o espaço reservado pelo nome do grupo de recursos a ser excluído. Todos os recursos dentro do grupo de recursos serão excluídos.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Pontos principais:
- Devido à variável
register
e à seçãodebug
do guia estratégico, os resultados são exibidos quando o comando é concluído.
- Devido à variável