Tutorial: Implementación de aplicaciones en conjuntos de escalado de máquinas virtuales de Azure con Ansible
Importante
Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.7 (o cualquier versión posterior).
El conjunto de escalado de máquinas virtuales de Azure es una función de Azure permite crear y administrar un grupo de máquinas virtuales idénticas con equilibrio de carga. No hay ningún costo adicional en los conjuntos de escalad y se crean a partir de máquinas virtuales. Solo se paga por los recursos de proceso subyacente como las instancias de máquina virtual, el equilibrador de carga o el almacenamiento de disco administrado. Con los conjuntos de escalado las capas de administración y automatización sirven para ejecutar y escalar sus aplicaciones. En su lugar, puede crear y administrar manualmente máquinas virtuales individuales. Sin embargo, hay dos ventajas principales por usar los conjuntos de escalado. Se crean en Azure y escalan automáticamente las máquinas virtuales para satisfacer las necesidades de aplicación.
En este artículo aprenderá a:
- Recuperar la información del host para un grupo de máquinas virtuales de Azure
- Clonar y compilar la aplicación de ejemplo
- Instalar el JRE (Java Runtime Environment) en un conjunto de escalado
- Implementar la aplicación Java en un conjunto de escalado
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.
- Conjunto de escalado de máquinas virtuales: si aún no tiene un conjunto de escalado, puede configurar uno con Ansible.
- git - git se usa para descargar un ejemplo de Java utilizado en este tutorial.
- Java SE Development Kit (JDK): el JDK se usa para compilar el proyecto de Java de ejemplo.
- Apache Maven - Apache Maven se usa para compilar el proyecto de Java de ejemplo.
Obtención de información sobre host
El código del cuaderno de estrategias de esta sección recupera la información del host para un grupo de máquinas virtuales. El código obtiene las direcciones IP públicas y el equilibrador de carga de un grupo de recursos especificado y crea un grupo host denominado scalesethosts
en el inventario.
Guarde el siguiente cuaderno de estrategias de ejemplo 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 }}"
Preparación de una aplicación para la implementación
El código del cuaderno de estrategias de esta sección utiliza git
para clonar un proyecto de ejemplo de Java desde GitHub y compila el proyecto.
Guarde el siguiente cuaderno de estrategias 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"
Ejecute el cuaderno de estrategias de Ansible de ejemplo con el siguiente comando:
ansible-playbook app.yml
Tras ejecutar el cuaderno de estrategias, debería ver resultados similares a los siguientes:
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
Implementación de la aplicación en un conjunto de escalado
El código del cuaderno de estrategias de esta sección se usa para:
- Instalar el JRE en un grupo host llamado
saclesethosts
- Implementar la aplicación de Java en un grupo host denominado
saclesethosts
Hay dos formas de obtener el cuaderno de estrategias de ejemplo:
Descargar el cuaderno de estrategias y guardarlo en
vmss-setup-deploy.yml
.Cree un nuevo archivo llamado
vmss-setup-deploy.yml
. Inserte el código siguiente en el nuevo archivo:
- 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 ejecutar el cuaderno de estrategias, consulte las notas siguientes:
En la sección
vars
, reemplace el marcador de posición{{ admin_password }}
por su propia contraseña.Para usar el tipo de conexión ssh con contraseñas, instale el programa sshpass:
Ubuntu:
apt-get install sshpass
En algunos entornos, puede que vea un error sobre el uso de una contraseña SSH en lugar de una clave. Si recibe ese error, puede deshabilitar la comprobación de la clave de host con la adición de la línea siguiente a
/etc/ansible/ansible.cfg
o~/.ansible.cfg
:[defaults] host_key_checking = False
Ejecute el cuaderno de estrategias con el siguiente comando:
ansible-playbook vmss-setup-deploy.yml
El resultado de la ejecución del comando ansible-playbook indica que la aplicación Java de ejemplo se ha instalado en el grupo host del conjunto de escalado:
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
Verificación de los resultados
Verifique los resultados de su trabajo en la dirección URL del equilibrador de carga del conjunto de escalado: