這很重要
需要 Ansible 2.7 (或更新版本)才能執行本文中的範例劇本。
Azure 虛擬機器擴展集 是一項 Azure 功能,可讓您設定一組相同的負載平衡 VM。 擴展集不需要額外的成本,它們是由虛擬機器建置而成的。 您只需支付基礎計算資源的費用,例如 VM 執行個體、負載平衡器或受控磁碟儲存體。 使用擴展集時,會提供管理和自動化層來執行和調整您的應用程式。 您可以改為手動建立和管理個別 VM。 不過,使用擴展集有兩個主要優點。 它們內建於 Azure 中,並自動調整您的虛擬機器以符合應用程式需求。
在本文中,您將學會如何:
- 擷取一組 Azure VM 的主機資訊
- 複製並建置範例應用程式
- 在擴展集上安裝 JRE (Java 執行階段環境)
- 將 Java 應用程式部署至擴展集
先決條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
安裝 Ansible:執行下列其中一個選項:
- 在Linux虛擬機器上安裝及設定Ansible
- 設定 Azure Cloud Shell ,如果您無法存取 Linux 虛擬機器,請 使用 Ansible 建立虛擬機器。
- 虛擬機器擴展集:如果您還沒有擴展集,您可以使用 Ansible 設定擴展集。
- git - git 用於下載本教學中使用的 Java 範例。
- Java SE 開發套件 (JDK) - JDK 用來建置範例 Java 專案。
- Apache Maven - Apache Maven 用於建置範例 Java 專案。
取得主機資訊
本節中的教戰手冊程式碼會擷取一組虛擬機器的主機資訊。 程式碼會取得指定資源群組內的公用 IP 位址和負載平衡器,並建立清單中名為的 scalesethosts 主機群組。
請將以下範例操作手冊儲存為 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 }}"
準備應用程式進行部署
本節中的教戰手冊程式碼用 git 來從 GitHub 複製 Java 範例專案並建置專案。
將以下教戰手冊儲存為 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"
使用下列命令執行範例 Ansible 劇本:
ansible-playbook app.yml
執行操作手冊之後,您會看到輸出結果如下:
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
將應用程式部署至擴展集
本節中指引的程式碼可用於:
- 將 JRE 安裝在名為
saclesethosts的主機群組上 - 將 Java 應用程式部署至名為
saclesethosts
有兩種方式可以取得範例操作手冊:
下載教戰手冊 並將其儲存至
vmss-setup-deploy.yml。建立名為
vmss-setup-deploy.yml的新檔案。 將下列程式碼插入新檔案中:
- 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
執行劇本之前,請參閱以下注意事項:
在
vars區段中,將{{ admin_password }}預留位置替換成您自己的密碼。若要使用帶有密碼的 ssh 連線類型,請安裝 sshpass 程式:
烏班圖:
apt-get install sshpass在某些環境中,您可能會看到有關使用 SSH 密碼而非金鑰的錯誤。 如果您確實收到該錯誤,您可以在
/etc/ansible/ansible.cfg或~/.ansible.cfg中加入以下這行來停用主機金鑰檢查:[defaults] host_key_checking = False
使用下列命令運行教戰手冊:
ansible-playbook vmss-setup-deploy.yml
執行 ansible-playbook 命令的輸出指出範例 Java 應用程式已安裝至擴展集的主機群組:
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
確認結果
瀏覽至規模集的負載平衡器 URL,來驗證您的工作成果。