Tutorial: Implantar aplicativos nos conjuntos de dimensionamento de máquinas virtuais no Azure usando o Ansible
Importante
O Ansible 2.7 (ou posterior) é necessário para executar os guias estratégicos de exemplo deste artigo.
Os conjuntos de dimensionamento de máquinas virtuais do Azure são um recurso do Azure que permite configurar um grupo de VMs idênticas e com balanceamento de carga. Não há nenhum custo adicional para os conjuntos de dimensionamento e eles são criados usando máquinas virtuais. Você paga apenas pelos recursos de computação subjacentes, como as instâncias de VM, os balanceadores de carga ou o armazenamento do Managed Disks. Com conjuntos de dimensionamento, as camadas de automação e gerenciamento são fornecidas para executar e dimensionar seus aplicativos. Em vez disso, você poderia criar e gerenciar VMs individuais manualmente. No entanto, há dois benefícios principais ao usar conjuntos de dimensionamento. Eles são criados no Azure e eles dimensionam automaticamente suas máquinas virtuais para atender às necessidades do aplicativo.
Neste artigo, você aprenderá como:
- Recuperar informações de host para um grupo de VMs do Azure
- Clonar e criar o aplicativo de exemplo
- Instalar o JRE (Java Runtime Environment) em um conjunto de dimensionamento
- Implantar o aplicativo Java em um conjunto de dimensionamento
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.
- Conjunto de dimensionamento de máquinas virtuais: se ainda não tiver um conjunto de dimensionamento, você poderá configurar um com o Ansible.
- git - O git é usado para baixar um exemplo de Java usado neste tutorial.
- JDK (Java SE Development Kit) – o JDK é usado para compilar o projeto Java de exemplo.
- Apache Maven - Apache Maven é usado para compilar o projeto Java de exemplo.
Obter informações do host
O código do guia estratégico nesta seção recupera as informações do host de um grupo de máquinas virtuais. O código obtém os endereços IP públicos e o balanceador de carga dentro de um grupo de recursos especificado e cria um grupo de hosts chamado scalesethosts
no inventário.
Salve o guia estratégico de exemplo a seguir como get-hosts-tasks.yml
:
- name: Get facts for all Public IPs within a resource groups
azure_rm_publicipaddress_info:
resource_group: "{{ resource_group }}"
register: output_ip_address
- name: Get loadbalancer info
azure_rm_loadbalancer_info:
resource_group: "{{ resource_group }}"
name: "{{ loadbalancer_name }}"
register: output
- name: Add all hosts
add_host:
groups: scalesethosts
hostname: "{{ output_ip_address.publicipaddresses[0].ip_address }}_{{ item.properties.frontendPort }}"
ansible_host: "{{ output_ip_address.publicipaddresses[0].ip_address }}"
ansible_port: "{{ item.properties.frontendPort }}"
ansible_ssh_user: "{{ admin_username }}"
ansible_ssh_pass: "{{ admin_password }}"
with_items:
- "{{ output.ansible_info.azure_loadbalancers[0].properties.inboundNatRules }}"
Preparar um aplicativo para implantação
O código do guia estratégico nesta seção usa o git
para clonar um projeto de exemplo do Java do GitHub e compila o projeto.
Salve o guia estratégico a seguir como app.yml
:
- hosts: localhost
vars:
repo_url: https://github.com/spring-guides/gs-spring-boot.git
workspace: ~/src/helloworld
tasks:
- name: Git Clone sample app
git:
repo: "{{ repo_url }}"
dest: "{{ workspace }}"
- name: Build sample app
shell: mvn package chdir="{{ workspace }}/complete"
Execute o guia estratégico de exemplo do Ansible com o seguinte comando:
ansible-playbook app.yml
Depois de executar o guia estratégico, você verá resultados semelhantes aos seguintes:
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Git Clone sample app]
changed: [localhost]
TASK [Build sample app]
changed: [localhost]
PLAY RECAP
localhost : ok=3 changed=2 unreachable=0 failed=0
Implantar o aplicativo em um conjunto de dimensionamento
O código do guia estratégico nesta seção é usado para:
- Instalar o JRE em um grupo de hosts chamado
saclesethosts
- Implantar o aplicativo Java em um grupo de hosts chamado
saclesethosts
Há duas maneiras de obter o guia estratégico de exemplo:
Baixe o guia estratégico e salve-o em
vmss-setup-deploy.yml
.Crie um arquivo chamado
vmss-setup-deploy.yml
. Insira o seguinte código no novo arquivo:
- hosts: localhost
vars:
resource_group: myResourceGroup
scaleset_name: myScaleSet
loadbalancer_name: myScaleSetLb
admin_username: azureuser
admin_password: "{{ admin_password }}"
tasks:
- include: get-hosts-tasks.yml
- name: Install JRE on a scale set
hosts: scalesethosts
become: yes
vars:
workspace: ~/src/helloworld
admin_username: azureuser
tasks:
- name: Install JRE
apt:
name: default-jre
update_cache: yes
- name: Copy app to Azure VM
copy:
src: "{{ workspace }}/complete/target/gs-spring-boot-0.1.0.jar"
dest: "/home/{{ admin_username }}/helloworld.jar"
force: yes
mode: 0755
- name: Start the application
shell: java -jar "/home/{{ admin_username }}/helloworld.jar" >/dev/null 2>&1 &
async: 5000
poll: 0
Antes de executar o guia estratégico, confira as observações a seguir:
Na seção
vars
, substitua o espaço reservado{{ admin_password }}
pela sua própria senha.Para usar o tipo de conexão ssh com senhas, instale o programa sshpass:
Ubuntu:
apt-get install sshpass
Em alguns ambientes, você poderá ver um erro sobre o uso de uma senha SSH em vez de uma chave. Se você receber esse erro, poderá desabilitar a verificação de chave de host adicionando a seguinte linha a
/etc/ansible/ansible.cfg
ou~/.ansible.cfg
:[defaults] host_key_checking = False
Execute o guia estratégico com o comando a seguir:
ansible-playbook vmss-setup-deploy.yml
A saída resultante da execução do comando ansible-playbook indica que o aplicativo Java de exemplo foi instalado no grupo de hosts do conjunto de dimensionamento:
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Get facts for all Public IPs within a resource groups]
ok: [localhost]
TASK [Get loadbalancer info]
ok: [localhost]
TASK [Add all hosts]
changed: [localhost] ...
PLAY [Install JRE on scale set]
TASK [Gathering Facts]
ok: [40.114.30.145_50000]
ok: [40.114.30.145_50003]
TASK [Copy app to Azure VM]
changed: [40.114.30.145_50003]
changed: [40.114.30.145_50000]
TASK [Start the application]
changed: [40.114.30.145_50000]
changed: [40.114.30.145_50003]
PLAY RECAP
40.114.30.145_50000 : ok=4 changed=3 unreachable=0 failed=0
40.114.30.145_50003 : ok=4 changed=3 unreachable=0 failed=0
localhost : ok=4 changed=1 unreachable=0 failed=0
Verifique os resultados
Para verificar os resultados de seu trabalho, navegue até a URL do balanceador de carga de seu conjunto de dimensionamento: