Tutorial: Bereitstellen von Apps für VM-Skalierungsgruppen in Azure mit Ansible
Wichtig
Für die Ausführung der Beispielplaybooks in diesem Artikel ist mindestens Ansible 2.7 erforderlich.
Azure-VM-Skalierungsgruppen sind eine Azure-Funktion, mit der Sie eine Gruppe von identischen virtuellen Computern mit Lastenausgleich konfigurieren können. Durch Skalierungsgruppen entstehen keine zusätzlichen Kosten, und sie werden aus virtuellen Computern erstellt. Sie zahlen nur für die zugrunde liegenden Computeressourcen, z. B. die VM-Instanzen, den Lastenausgleich oder den Speicher für verwaltete Datenträger. Mit Skalierungsgruppen werden die Verwaltungs- und Automatisierungsebenen für die Ausführung und Skalierung Ihrer Anwendungen bereitgestellt. Sie können stattdessen einzelne virtuelle Computer manuell erstellen und verwalten. Die Verwendung von Skalierungsgruppen bietet jedoch zwei wesentliche Vorteile. Sie sind in Azure integriert und skalieren Ihre virtuellen Computer automatisch entsprechend den Anwendungsanforderungen.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Abrufen der Hostinformationen für eine Gruppe von virtuellen Azure-Computern
- Klonen und Erstellen der Beispiel-App
- Installieren einer JRE-Instanz (Java Runtime Environment) in einer Skalierungsgruppe
- Bereitstellen der Java-Anwendung in einer Skalierungsgruppe
Voraussetzungen
- Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Installieren von Ansible: Verwenden Sie eine der folgenden Optionen:
- Installieren und Konfigurieren von Ansible auf einem virtuellen Linux-Computer
- Konfigurieren Sie Azure Cloud Shell. Sollten Sie keinen Zugriff auf einen virtuellen Linux-Computer haben, können Sie mit Ansible einen virtuellen Computer erstellen.
- VM-Skalierungsgruppe: Wenn Sie noch keine Skalierungsgruppe haben, können Sie mit Ansible eine konfigurieren.
- Git - Git wird verwendet, um ein in diesem Tutorial verwendetes Java-Beispiel herunterzuladen.
- Java SE Development Kit (JDK): Mit dem JDK wird das Java-Beispielprojekt erstellt.
- Apache Maven - Apache Maven wird verwendet, um das Java-Beispielprojekt zu erstellen.
Abrufen der Hostinformationen
Mit dem Playbookcode in diesem Abschnitt werden Hostinformationen für eine Gruppe virtueller Computer abgerufen. Der Code ruft die öffentlichen IP-Adressen und den Load Balancer in einer angegebenen Ressourcengruppe ab und erstellt im Bestand eine Hostgruppe mit dem Namen scalesethosts
.
Speichern Sie das folgende Beispielplaybook als 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 }}"
Vorbereiten einer Anwendung für die Bereitstellung
Im Playbookcode in diesem Abschnitt wird git
verwendet, um ein Java-Beispielprojekt von GitHub zu klonen, und das Projekt wird erstellt.
Speichern Sie das folgende Playbook als 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"
Führen Sie das Ansible-Beispielplaybook mit dem folgenden Befehl aus:
ansible-playbook app.yml
Nach dem Ausführen des Playbooks wird in etwa die folgende Ausgabe angezeigt:
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
Bereitstellen der Anwendung in einer Skalierungsgruppe
Der Playbookcode in diesem Abschnitt wird für Folgendes verwendet:
- Installieren der JRE in einer Hostgruppe mit dem Namen
saclesethosts
- Bereitstellen der Java-Anwendung in einer Hostgruppe mit dem Namen
saclesethosts
Es gibt zwei Möglichkeiten, das Beispielplaybook abzurufen:
Laden Sie das Playbook herunter, und speichern Sie es als
vmss-setup-deploy.yml
.Erstelle eine neue Datei mit dem Namen
vmss-setup-deploy.yml
. Fügen Sie den folgenden Code in die neue Datei ein:
- 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
Beachten Sie vor dem Ausführen des Playbooks die folgenden Hinweise:
Ersetzen Sie im Abschnitt
vars
den Platzhalter{{ admin_password }}
durch Ihr eigenes Kennwort.Installieren Sie das Programm sshpass, um den Verbindungstyp „ssh“ mit Kennwörtern zu verwenden:
Ubuntu:
apt-get install sshpass
In einigen Umgebungen wird ggf. ein Fehler mit dem Hinweis angezeigt, das anstelle eines Schlüssels ein SSH-Kennwort verwendet werden muss. Wenn Sie diesen Fehler erhalten, können Sie die Überprüfung des Hostschlüssels deaktivieren, indem Sie
/etc/ansible/ansible.cfg
oder~/.ansible.cfg
die folgende Zeile hinzufügen:[defaults] host_key_checking = False
Führen Sie das Playbook mit dem folgenden Befehl aus:
ansible-playbook vmss-setup-deploy.yml
In der Ausgabe nach Ausführung des Befehls „ansible-playbook“ ist angegeben, dass die Java-Beispielanwendung in der Hostgruppe der Skalierungsgruppe installiert wurde:
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
Überprüfen der Ergebnisse
Überprüfen Sie die Ergebnisse Ihrer Arbeit, indem Sie zur URL des Lastenausgleichs für Ihre Skalierungsgruppe navigieren: