Tutorial: Criar uma VM ou um conjunto de dimensionamento de máquina virtual a partir da Galeria de Imagens Partilhadas do Azure utilizando o Ansible
Importante
O Ansible 2.9 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.
A Galeria de Imagens Partilhadas é um serviço que lhe permite gerir, partilhar e organizar facilmente imagens geridas de forma personalizada. Esse recurso é benéfico para cenários onde muitas imagens são mantidas e compartilhadas. As imagens personalizadas podem ser partilhadas entre subscrições e entre inquilinos do Microsoft Entra. As imagens também podem ser replicadas para várias regiões para um dimensionamento de implantação mais rápido.
Neste artigo, vai aprender a:
- Criar uma VM generalizada e uma imagem personalizada
- Criar um Shared Image Gallery
- Criar uma imagem compartilhada e uma versão de imagem
- Criar uma VM usando a imagem generalizada
- Criar um conjunto de escala de máquina virtual usando a imagem generalizada
- Obtenha informações sobre a sua Galeria de Imagens Partilhadas, imagem e versão.
Pré-requisitos
- Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.
Instale o Ansible: execute uma das seguintes opções:
- Instalar e configurar o Ansible em uma máquina virtual Linux
- Configure o Azure Cloud Shell e, se você não tiver acesso a uma máquina virtual Linux, crie uma máquina virtual com o Ansible.
Obtenha os exemplos de playbooks
Há duas maneiras de obter o conjunto completo de exemplos de playbooks:
- Faça o download da pasta SIG e salve-a em sua máquina local.
- Crie um novo arquivo para cada seção e copie o playbook de exemplo nela.
O vars.yml
arquivo contém as variáveis usadas por todos os playbooks de exemplo para este tutorial. Você pode editar o arquivo para fornecer nomes e valores exclusivos.
O primeiro exemplo de manual 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; sub-rede; endereço IP público e placa de interface de rede para a VM.
- Uma máquina virtual de origem, que é 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 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
Execute o playbook usando o ansible-playbook
ansible-playbook 00-prerequisites.yml
No portal do Azure, verifique o grupo de recursos especificado para vars.yml
ver a nova máquina virtual e vários recursos criados.
Generalizar a VM e criar uma imagem personalizada
O próximo playbook, , generaliza a VM de origem criada na etapa anterior e, em seguida, 01a-create-generalized-image.yml
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 }}"
Execute o playbook usando o ansible-playbook
ansible-playbook 01a-create-generalized-image.yml
Verifique o seu grupo de recursos e certifique-se de que testimagea
aparece.
Criar a Galeria de Imagens Partilhadas
A galeria de imagens é o repositório para compartilhar e gerenciar imagens. O código de exemplo do playbook em cria uma Galeria de Imagens Compartilhadas em 02-create-shared-image-gallery.yml
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.
Execute o playbook usando o ansible-playbook
ansible-playbook 02-create-shared-image-gallery.yml
Agora você vê uma nova galeria, , myGallery
em seu grupo de recursos.
Criar uma imagem compartilhada e uma versão de imagem
O próximo playbook, 03a-create-shared-image-generalized.yml
cria uma definição de imagem e uma versão de imagem.
As definições de imagem incluem o tipo de imagem (Windows ou Linux), notas de versão e requisitos mínimos e máximos de memória. Versão da imagem é a versão da imagem. Galeria, definição de imagem e versão de imagem ajudam 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
Execute o playbook usando o 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 com base na imagem generalizada
Finalmente, 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 }}"
Execute o playbook usando o ansible-playbook
ansible-playbook 04a-create-vm-using-generalized-image.yml
Criar conjuntos de dimensionamento de máquina virtual com base na imagem generalizada
Você também pode criar um conjunto de dimensionamento de máquina virtual com base na imagem generalizada. Corra 05a-create-vmss-using-generalized-image.yml
para fazê-lo.
- 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 }}"
Execute o playbook usando o ansible-playbook
ansible-playbook 05a-create-vmss-using-generalized-image.yml
Obtenha informações sobre a galeria
Você pode obter informações sobre a galeria, a definição da 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 }}"
Execute o playbook usando o ansible-playbook
ansible-playbook 06-get-info.yml
Excluir a imagem compartilhada
Para excluir os recursos da galeria, consulte o exemplo de playbook 07-delete-gallery.yml
. Exclua recursos na ordem inversa. Comece por eliminar a versão da imagem. Depois de excluir todas as versões da imagem, você pode excluir a definição da imagem. Depois de excluir todas as definições de imagem, você pode 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
Execute o playbook usando o ansible-playbook
ansible-playbook 07-delete-gallery.yml
Clean up resources (Limpar 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 playbook 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 e
debug
àregister
seção do playbook, os resultados são exibidos quando o comando é concluído.
- Devido à variável e
Próximos passos
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários