重要
この記事のサンプル プレイブックを実行するには、Ansible 2.7 (以降) が必要です。
Azure Virtual Machine Scale Sets は、負荷分散が行われる同一の VM のグループを構成するための Azure 機能です。 スケール セットに追加コストはなく、仮想マシンから構築されます。 ユーザーは、VM インスタンス、ロード バランサー、マネージド ディスク ストレージなど、基本的なコンピューティング リソースに対してのみ支払います。 スケール セットには、アプリケーションの実行とスケーリングを行うための管理レイヤーと自動化レイヤーがあります。 代わりに手動で個々 の VM を作成し管理できます。 ただし、スケール セットの使用には、2 つの主な利点があります。 それらは Azure に組み込まれ、アプリケーションのニーズを満たすように自動的に仮想マシンを拡大縮小します。
この記事では、次のことについて説明します。
- Azure VM グループのホスト情報を取得する
- サンプル アプリを複製してビルドする
- スケール セットに JRE (Java Runtime Environment) をインストールする
- スケール セットに Java アプリケーションをデプロイする
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Ansible のインストール: 次のいずれかのオプションを実行します。
- Linux 仮想マシンに Ansible をインストールして構成する
- Azure Cloud Shell の構成 - アクセスできる Linux 仮想マシンがない場合は、Ansible で仮想マシンを作成できます。
- 仮想マシン スケール セット: スケール セットがまだない場合は、Ansible を使用してスケール セットを構成します。
- git - このチュートリアルでは、git を使用して Java サンプルをダウンロードします。
- Java SE Development Kit (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
スケール セットにアプリケーションをデプロイする
このセクションのプレイブック コードでは、次のことを行います。
saclesethosts
という名前のホスト グループに JRE をインストールするsaclesethosts
という名前のホスト グループに Java アプリケーションをデプロイする
サンプル プレイブックを取得するには、次の 2 つの方法があります。
プレイブックをダウンロードして、
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 プログラムをインストールします。
Ubuntu:
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 にアクセスして、作業の結果を確認します。