Tutorial: Menyebarkan aplikasi ke kumpulan skala mesin virtual di Azure menggunakan Ansible

Penting

Ansible 2.7 (atau lebih baru) diperlukan untuk menjalankan sampel playbook dalam artikel ini.

set skala komputer virtual Azure adalah fitur Azure yang memungkinkan Anda mengonfigurasi sebuah grup VM dengan beban seimbang yang identik. Tidak ada biaya tambahan untuk set skala dan ini dibangun dari mesin virtual. Anda hanya membayar untuk sumber daya komputasi dasar seperti instans VM, penyeimbang beban, atau penyimpanan Disk Terkelola. Dengan set skala, lapisan manajemen dan otomatisasi disediakan untuk menjalankan dan menskalakan aplikasi Anda. Anda dapat membuat dan mengelola VM individual secara manual. Namun, ada dua manfaat utama dari penggunaan set skala. Ini dibangun ke dalam Azure dan secara otomatis menskalakan mesin virtual Anda untuk memenuhi kebutuhan aplikasi.

Dalam artikel ini, Anda akan mempelajari cara:

  • Mengambil informasi host untuk grup VM Azure
  • Mengkloning dan membuat aplikasi sampel
  • Instal JRE (Java Runtime Environment) pada set skala
  • Menyebarkan aplikasi Java ke set skala

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
  • git - git digunakan untuk mengunduh sampel Java yang digunakan dalam tutorial ini.
  • Java SE Development Kit (JDK) - JDK digunakan untuk membangun proyek sampel Java.
  • Apache Maven - Apache Maven digunakan untuk membangun proyek sampel Java.

Kumpulkan informasi host

Kode playbook di bagian ini mengambil informasi host untuk grup mesin virtual. Kode mendapatkan alamat IP publik dan load balancer dalam grup sumber daya tertentu dan membuat grup host yang dinamai scalesethosts dalam inventaris.

Simpan sampel playbook berikut sebagai 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 }}"

Menyiapkan aplikasi untuk penyebaran

Kode playbook di bagian ini digunakan git untuk mengkloning proyek sampel Java dari GitHub dan membangun proyek.

Simpan playbook berikut sebagai 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"

Jalankan sampel playbook Ansible dengan perintah berikut:

ansible-playbook app.yml

Setelah menjalankan playbook, Anda melihat output yang mirip dengan hasil berikut:

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

Menyebarkan aplikasi ke set skala

Kode playbook di bagian ini digunakan untuk:

  • Menginstal JRE pada grup host bernama saclesethosts
  • Menyebarkan aplikasi Java ke grup host bernama saclesethosts

Ada dua cara untuk mendapatkan playbook sampel:

  • Unduh playbook dan simpan ke vmss-setup-deploy.yml.

  • Buat file baru bernama vmss-setup-deploy.yml. Masukkan kode berikut ke file yang baru:

- 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

Sebelum menjalankan playbook, lihat catatan berikut:

  • Di bagian vars, ganti tempat penampung {{ admin_password }} dengan kata sandi Anda sendiri.

  • Untuk menggunakan jenis koneksi ssh dengan kata sandi, instal program sshpass:

    Ubuntu:

    apt-get install sshpass
    

    CentOS:

    yum install sshpass
    
  • Di beberapa lingkungan, Anda mungkin melihat kesalahan tentang menggunakan kata sandi SSH, dari pada kunci. Jika Anda menerima kesalahan itu, Anda dapat menonaktifkan pemeriksaan kunci host dengan menambahkan baris berikut ke /etc/ansible/ansible.cfg atau ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    

Jalankan playbook dengan perintah berikut:

ansible-playbook vmss-setup-deploy.yml

Output dari menjalankan perintah ansible-playbook menunjukkan bahwa sampel aplikasi Java telah diinstal ke grup host dari set skala:

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

Memverifikasi hasil

Verifikasi hasil pekerjaan Anda dengan menavigasi ke URL load balancer untuk set skala Anda:

Java app running in a scale set in Azure.

Langkah berikutnya