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.
  • 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:

- 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
    

    CentOS:

    yum 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:

Java app running in a scale set in Azure.

Pasos siguientes