Partilhar via


Tutorial: Implantar aplicativos em conjuntos de dimensionamento de máquinas virtuais no Azure usando 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. Com conjuntos de escala, as camadas de gerenciamento e automação são fornecidas para executar e dimensionar seus aplicativos. 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, você 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 a aplicação Java num grupo de escalonamento

Pré-requisitos

  • Assinatura do Azure: se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Git - O git é usado para baixar uma amostra Java usada neste tutorial.
  • Java SE Development Kit (JDK) - O JDK é usado para construir o projeto Java de exemplo.
  • Apache Maven - [en]O Apache Maven é usado para construir o projeto Java de exemplo.

Obter informações do anfitrião

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.

Salve o seguinte exemplo de playbook 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 playbook nesta seção usa git para clonar um projeto de exemplo Java do GitHub e constrói o projeto.

Salve o seguinte playbook 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 playbook de exemplo do Ansible 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 a aplicação num 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 guarde-o em vmss-setup-deploy.yml.

  • Crie um novo 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 playbook, consulte as seguintes notas:

  • Na seção vars, substitua o marcador {{ 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ê 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 playbook com o seguinte comando:

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:

Aplicativo Java em execução em uma escala definida no Azure.

Próximos passos