Esercitazione: Distribuire app in set di scalabilità di macchine virtuali in Azure tramite Ansible
Importante
Per eseguire i playbook di esempio contenuti in questo articolo, è necessario usare Ansible 2.7 (o versioni successive).
I set di scalabilità di macchine virtuali di Azure sono una funzionalità di Azure che permette di configurare un gruppo di macchine virtuali con bilanciamento del carico identiche. Non sono previsti costi aggiuntivi per i set di scalabilità, in quanto vengono creati dalle macchine virtuali. Si paga solo per le risorse di calcolo sottostanti, come le istanze di macchina virtuale, il bilanciamento del carico o l'archiviazione su Managed Disks. I set di scalabilità forniscono i livelli di automazione e gestione per eseguire e ridimensionare le applicazioni. È comunque possibile creare e gestire manualmente singole macchine virtuali. Tuttavia, l'uso di set di scalabilità offre due importanti vantaggi. Sono integrati in Azure e ridimensionano automaticamente le macchine virtuale in base alle esigenze dell'applicazione.
In questo articolo vengono illustrate le operazioni seguenti:
- Recuperare informazioni sull'host per un gruppo di macchine virtuali di Azure
- Clonare e compilare l'app di esempio
- Installare JRE (Java Runtime Environment) in un set di scalabilità
- Distribuire l'applicazione Java in un set di scalabilità
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Installare Ansible: eseguire una delle opzioni seguenti:
- Installare e configurare Ansible in una macchina virtuale Linux
- Configurare Azure Cloud Shell e, se non si ha accesso a una macchina virtuale Linux, creare una macchina virtuale con Ansible.
- Set di scalabilità di macchine virtuali: se non è già disponibile un set di scalabilità, è possibile configurare un set di scalabilità con Ansible.
- git - git viene usato per scaricare un esempio di Java usato in questa esercitazione.
- Java SE Development Kit (JDK) - JDK viene usato per compilare il progetto Java di esempio.
- Apache Maven - Apache Maven viene usato per compilare il progetto Java di esempio.
Ottenere informazioni sugli host
Il codice del playbook in questa sezione consente di recuperare informazioni sull'host per un gruppo di macchine virtuali. Il codice ottiene gli indirizzi IP pubblici e il bilanciamento del carico all'interno di un gruppo di risorse specificato e crea un gruppo host denominato scalesethosts
nell'inventario.
Salvare il playbook di esempio seguente come 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 }}"
Preparare un'applicazione per la distribuzione
Il codice del playbook in questa sezione usa git
per clonare un progetto di esempio Java da GitHub e compila il progetto.
Salvare il playbook seguente come 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"
Eseguire il playbook di Ansible di esempio con il comando seguente:
ansible-playbook app.yml
Dopo avere eseguito il playbook, viene visualizzato un output simile ai risultati seguenti:
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
Distribuire l'applicazione in un set di scalabilità
Il codice del playbook in questa sezione viene usato per:
- Installare JRE in un gruppo host denominato
saclesethosts
- Distribuire l'applicazione Java in un gruppo host denominato
saclesethosts
È possibile ottenere il playbook di esempio in due modi:
Scaricare il playbook e salvarlo in
vmss-setup-deploy.yml
.Creare un file denominato
vmss-setup-deploy.yml
. Inserire il codice seguente nel nuovo file:
- 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
Prima di eseguire il playbook, vedere le note seguenti:
Nella sezione
vars
sostituire il segnaposto{{ admin_password }}
con la propria password.Per usare il tipo di connessione ssh con le password, installare il programma sshpass:
Ubuntu:
apt-get install sshpass
In alcuni ambienti potrebbe essere visualizzato un errore sull'uso di una password SSH invece di una chiave. Se si riceve questo errore, è possibile disabilitare il controllo della chiave dell'host aggiungendo la riga seguente a
/etc/ansible/ansible.cfg
o~/.ansible.cfg
:[defaults] host_key_checking = False
Eseguire il playbook con il comando seguente:
ansible-playbook vmss-setup-deploy.yml
L'output prodotto dall'esecuzione del comando ansible-playbook indica che l'applicazione Java di esempio è stata installata nel gruppo host del set di scalabilità:
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
Verificare i risultati
Verificare i risultati delle varie operazioni eseguite passando all'URL del servizio di bilanciamento del carico per il set di scalabilità: