Tutorial: Implementación de aplicaciones en conjuntos de escalado de máquinas virtuales de Azure con AnsibleTutorial: Deploy apps to virtual machine scale sets in Azure using Ansible

Importante

Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.7 (o cualquier versión posterior).Ansible 2.7 (or later) is required to run the sample playbooks in this article.

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.Azure virtual machine scale sets is an Azure feature that lets you configure a group of identical, load balanced VMs. No hay ningún costo adicional en los conjuntos de escalad y se crean a partir de máquinas virtuales.There's no additional cost to scale sets and they're built from virtual machines. 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.You pay only for the underlying compute resources such as the VM instances, load balancers, or Managed Disk storage. Con los conjuntos de escalado las capas de administración y automatización sirven para ejecutar y escalar sus aplicaciones.With scale sets, the management and automation layers are provided to run and scale your applications. En su lugar, puede crear y administrar manualmente máquinas virtuales individuales.You could instead manually create and manage individual VMs. Sin embargo, hay dos ventajas principales por usar los conjuntos de escalado.However, there are two key benefits to using scale sets. Se crean en Azure y escalan automáticamente las máquinas virtuales para satisfacer las necesidades de aplicación.They're built into Azure and they automatically scale your virtual machines to meet application needs.

En este tutorial, se usa Ansible para:In this tutorial, Ansible is used to:

  • Recuperar la información del host para un grupo de máquinas virtuales de AzureRetrieve host information for a group of Azure VMs
  • Clonar y compilar la aplicación de ejemploClone and build the sample app
  • Instalar el JRE (Java Runtime Environment) en un conjunto de escaladoInstall the JRE (Java Runtime Environment) on a scale set
  • Implementar la aplicación Java en un conjunto de escaladoDeploy the Java application to a scale set

Requisitos previosPrerequisites

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.
  • git - git se usa para descargar un ejemplo de Java utilizado en este tutorial.git - git is used to download a Java sample used in this tutorial.
  • Java SE Development Kit (JDK): el JDK se usa para compilar el proyecto de Java de ejemplo.Java SE Development Kit (JDK) - The JDK is used to build the sample Java project.
  • Apache Maven - Apache Maven se usa para compilar el proyecto de Java de ejemplo.Apache Maven - Apache Maven is used to build the sample Java project.

Obtención de información sobre hostGet host information

El código del cuaderno de estrategias de esta sección recupera la información del host para un grupo de máquinas virtuales.The playbook code in this section retrieves host information for a group of virtual machines. 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.The code gets the public IP addresses and load balancer within a specified resource group and creates a host group named scalesethosts in inventory.

Guarde el siguiente cuaderno de estrategias de ejemplo como get-hosts-tasks.yml:Save the following sample playbook as get-hosts-tasks.yml:

- name: Get facts for all Public IPs within a resource groups
  azure_rm_publicipaddress_facts:
    resource_group: "{{ resource_group }}"
  register: output_ip_address

- name: Get loadbalancer info
  azure_rm_loadbalancer_facts:
    resource_group: "{{ resource_group }}"
    name: "{{ loadbalancer_name }}"
  register: output

- name: Add all hosts
  add_host:
    groups: scalesethosts
    hostname: "{{ output_ip_address.ansible_facts.azure_publicipaddresses[0].properties.ipAddress }}_{{ item.properties.frontendPort }}"
    ansible_host: "{{ output_ip_address.ansible_facts.azure_publicipaddresses[0].properties.ipAddress }}"
    ansible_port: "{{ item.properties.frontendPort }}"
    ansible_ssh_user: "{{ admin_username }}"
    ansible_ssh_pass: "{{ admin_password }}"
  with_items:
    - "{{ output.ansible_facts.azure_loadbalancers[0].properties.inboundNatRules }}"

Preparación de una aplicación para la implementaciónPrepare an application for deployment

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.The playbook code in this section uses git to clone a Java sample project from GitHub and builds the project.

Guarde el siguiente cuaderno de estrategias como app.yml:Save the following playbook as 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:Run the sample Ansible playbook with the following command:

ansible-playbook app.yml

Tras ejecutar el cuaderno de estrategias, debería ver resultados similares a los siguientes:After running the playbook, you see output similar to the following results:

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 escaladoDeploy the application to a scale set

El código del cuaderno de estrategias de esta sección se usa para:The playbook code in this section is used to:

  • Instalar el JRE en un grupo host llamado saclesethostsInstall the JRE on a host group named saclesethosts
  • Implementar la aplicación de Java en un grupo host denominado saclesethostsDeploy the Java application to a host group named saclesethosts

Hay dos formas de obtener el cuaderno de estrategias de ejemplo:There are two ways to get the sample playbook:

  • Descargar el cuaderno de estrategias y guardarlo en vmss-setup-deploy.yml.Download the playbook and save it to vmss-setup-deploy.yml.
  • Crear un archivo llamado vmss-setup-deploy.yml y copiar en él el siguiente contenido:Create a new file named vmss-setup-deploy.yml and copy into it the following contents:
- 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, vea las notas siguientes:Before running the playbook, see the following notes:

  • En la sección vars, reemplace el marcador de posición {{ admin_password }} por su propia contraseña.In the vars section, replace the {{ admin_password }} placeholder with your own password.

  • Para usar el tipo de conexión ssh con contraseñas, instale el programa sshpass:To use the ssh connection type with passwords, install the sshpass program:

    Ubuntu:Ubuntu:

    apt-get install sshpass
    

    CentOS: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.In some environments, you may see an error about using an SSH password instead of a key. 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:If you do receive that error, you can disable host key checking by adding the following line to /etc/ansible/ansible.cfg or ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    

Ejecute el cuaderno de estrategias con el siguiente comando:Run the playbook with the following command:

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:The output from running the ansible-playbook command indicates that the sample Java application has been installed to the host group of the scale set:

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 resultadosVerify the results

Verifique los resultados de su trabajo en la dirección URL del equilibrador de carga del conjunto de escalado:Verify the results of your work by navigating to the URL of the load balancer for your scale set:

Aplicación Java en ejecución en un conjunto de escalado de Azure.

Pasos siguientesNext steps