Tutorial: Implementar aplicações em conjuntos de dimensionamento de máquinas virtuais no Azure com o Ansible
Importante
O Ansible 2.7 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.
Os conjuntos de dimensionamento de máquina virtual do Azure são um recurso do Azure que permite configurar um grupo de VMs idênticas com balanceamento de carga. Não há custo adicional para dimensionar conjuntos e eles são criados a partir de máquinas virtuais. Você paga apenas pelos recursos de computação subjacentes, como instâncias de VM, balanceadores de carga ou armazenamento em disco gerenciado. Nos conjuntos de dimensionamento, as camadas de gestão e automatização são fornecidas para executar e dimensionar as suas aplicações. Em vez disso, você pode criar e gerenciar manualmente VMs individuais. No entanto, há dois benefícios principais no uso de conjuntos de escalas. Eles são incorporados ao Azure e dimensionam automaticamente suas máquinas virtuais para atender às necessidades do aplicativo.
Neste artigo, vai aprender a:
- Recuperar informações de host para um grupo de VMs do Azure
- Clone e crie o aplicativo de exemplo
- Instale o JRE (Java Runtime Environment) em um conjunto de escala
- Implementar o aplicativo Java em um conjunto de escala
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.
- Conjunto de dimensionamento de máquina virtual: se você ainda não tiver um conjunto de escalas, poderá configurar um conjunto de escalas com o Ansible.
- O git - git serve para transferir um exemplo do Java utilizado neste tutorial.
- Kit de Desenvolvimento SE do Java (JDK) - o JDK serve para compilar o projeto Java de exemplo.
- Apache Maven - O Apache Maven é usado para construir o projeto Java de exemplo.
Obter informações dos anfitriões
O código do playbook nesta seção recupera informações de host para 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 nomeado scalesethosts
no inventário.
Guarde o manual de procedimentos de exemplo seguinte 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 uma aplicação para implementação
O código do playbook nesta seção usa git
para clonar um projeto de exemplo Java do GitHub e constrói o projeto.
Guarde o manual de procedimentos seguinte 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 manual de procedimentos do Ansible de exemplo com o seguinte comando:
ansible-playbook app.yml
Depois de executar o playbook, você verá uma saída semelhante aos seguintes resultados:
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 escala
O código do playbook nesta seção é usado para:
- Instalar o JRE em um grupo de hosts chamado
saclesethosts
- Implementar o aplicativo Java em um grupo de hosts chamado
saclesethosts
Há duas maneiras de obter o manual de exemplo:
Faça o download do playbook e salve-o em
vmss-setup-deploy.yml
.Crie um novo ficheiro com o nome
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 playbook, consulte as seguintes notas:
vars
Na seção, substitua o espaço reservado{{ admin_password }}
por 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ê pode ver um erro sobre o uso de uma senha SSH em vez de uma chave. Se você receber esse erro, poderá desativar a verificação da chave do host adicionando a seguinte linha a
/etc/ansible/ansible.cfg
ou~/.ansible.cfg
:[defaults] host_key_checking = False
Execute o manual de procedimentos com o comando seguinte:
ansible-playbook vmss-setup-deploy.yml
A saída da execução do comando ansible-playbook indica que o aplicativo Java de exemplo foi instalado no grupo de hosts do conjunto de escalas:
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
Verificar os resultados
Verifique os resultados do seu trabalho navegando até a URL do balanceador de carga do seu conjunto de escalas: