チュートリアル: Ansible を使用して Azure 内に仮想マシン スケール セットを構成する
重要
この記事のサンプル プレイブックを実行するには、Ansible 2.9 (以降) が必要です。
Azure Virtual Machine Scale Sets は、負荷分散が行われる同一の VM のグループを構成するための Azure 機能です。 スケール セットに追加コストはなく、仮想マシンから構築されます。 ユーザーは、VM インスタンス、ロード バランサー、マネージド ディスク ストレージなど、基本的なコンピューティング リソースに対してのみ支払います。 スケール セットには、アプリケーションの実行とスケーリングを行うための管理レイヤーと自動化レイヤーがあります。 代わりに手動で個々 の VM を作成し管理できます。 ただし、スケール セットの使用には、2 つの主な利点があります。 それらは Azure に組み込まれ、アプリケーションのニーズを満たすように自動的に仮想マシンを拡大縮小します。
この記事では、次のことについて説明します。
- VM 用のリソースを構成する
- スケール セットを構成する
- その VM インスタンスを増加してスケール セットをスケーリングする
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Ansible のインストール: 次のいずれかのオプションを実行します。
- Linux 仮想マシンに Ansible をインストールして構成する
- Azure Cloud Shell の構成 - アクセスできる Linux 仮想マシンがない場合は、Ansible で仮想マシンを作成できます。
スケール セットを構成する
このセクションのプレイブック コードは、次のリソースを定義します。
- リソース グループ。すべてのリソースがデプロイされるリソース グループです。
- 仮想ネットワーク。10.0.0.0/16 アドレス空間内の仮想ネットワークです。
- サブネット。仮想ネットワーク内のサブネットです。
- パブリック IP アドレス。このアドレスを使用して、インターネットのリソースにアクセスできます。
- ネットワーク セキュリティ グループ。スケール セットへのネットワーク トラフィックおよびスケール セットからのネットワーク トラフィックのフローを制御します。
- ロード バランサー。ロード バランサー ルールを使用して、定義された一連の VM にトラフィックを分散します。
- 仮想マシン スケール セット。作成されたすべてのリソースを使用します。
サンプル プレイブックを取得するには、次の 2 つの方法があります。
プレイブックをダウンロードして、そのファイルを
vmss-create.yml
として保存する。vmss-create.yml
という名前で新しいファイルを作成します。 次のコードを新しいファイルに挿入します。
- hosts: localhost
vars:
resource_group: myResourceGroup
vmss_name: myvmscalesetname
vmss_lb_name: myScaleSetLb
location: eastus
admin_username: azureuser
admin_password: "{{ admin_password }}"
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
address_prefix: "10.0.1.0/24"
virtual_network: "{{ vmss_name }}"
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Static
name: "{{ vmss_name }}"
- name: Create Network Security Group that allows SSH
azure_rm_securitygroup:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
rules:
- name: SSH
protocol: Tcp
destination_port_range: 22
access: Allow
priority: 1001
direction: Inbound
- name: Create a load balancer
azure_rm_loadbalancer:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}lb"
location: "{{ location }}"
frontend_ip_configurations:
- name: "{{ vmss_name }}front-config"
public_ip_address: "{{ vmss_name }}"
backend_address_pools:
- name: "{{ vmss_name }}backend-pool"
probes:
- name: "{{ vmss_name }}prob0"
port: 8080
interval: 10
fail_count: 3
inbound_nat_pools:
- name: "{{ vmss_name }}nat-pool"
frontend_ip_configuration_name: "{{ vmss_name }}front-config"
protocol: Tcp
frontend_port_range_start: 50000
frontend_port_range_end: 50040
backend_port: 22
load_balancing_rules:
- name: "{{ vmss_name }}lb-rules"
frontend_ip_configuration: "{{ vmss_name }}front-config"
backend_address_pool: "{{ vmss_name }}backend-pool"
frontend_port: 80
backend_port: 8080
load_distribution: Default
probe: "{{ vmss_name }}prob0"
- name: Create VMSS
no_log: true
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
vm_size: Standard_DS1_v2
admin_username: "{{ admin_username }}"
admin_password: "{{ admin_password }}"
ssh_password_enabled: true
capacity: 2
virtual_network_name: "{{ vmss_name }}"
subnet_name: "{{ vmss_name }}"
upgrade_policy: Manual
tier: Standard
managed_disk_type: Standard_LRS
os_disk_caching: ReadWrite
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
version: latest
load_balancer: "{{ vmss_name }}lb"
data_disks:
- lun: 0
disk_size_gb: 20
managed_disk_type: Standard_LRS
caching: ReadOnly
- lun: 1
disk_size_gb: 30
managed_disk_type: Standard_LRS
caching: ReadOnly
プレイブックを実行する前に、次の注意事項を参照してください。
vars
セクションで、{{ admin_password }}
プレースホルダーを自分のパスワードに置き換えます。
ansible-playbook を使用してプレイブックを実行します
ansible-playbook vmss-create.yml
プレイブックを実行すると、次の結果のような出力が表示されます。
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Create a resource group]
changed: [localhost]
TASK [Create virtual network]
changed: [localhost]
TASK [Add subnet]
changed: [localhost]
TASK [Create public IP address]
changed: [localhost]
TASK [Create Network Security Group that allows SSH]
changed: [localhost]
TASK [Create a load balancer]
changed: [localhost]
TASK [Create Scale Set]
changed: [localhost]
PLAY RECAP
localhost : ok=8 changed=7 unreachable=0 failed=0
VM インスタンスの数を表示する
構成されているスケール セットには、現在 2 つのインスタンスがあります。 次の手順を使用してその値を確認します。
Azure portal にサインインします。
構成したスケール セットに移動します。
次のように、インスタンスの数がかっこ内に入ったスケール セット名を確認できます。
Standard_DS1_v2 (2 instances)
次のコマンドを実行して、Azure Cloud Shell でインスタンスの数を確認することもできます。
az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}'
Cloud Shell で Azure CLI コマンドを実行した結果には、2 つのインスタンスが存在することが示されています。
{ "capacity": 2, }
スケール セットをスケールアウトする
次のセクションのプレイブック コードは、スケール セットに関する情報を取得して、その容量を 2 から 3 に変更します。
サンプル プレイブックを取得するには、次の 2 つの方法があります。
プレイブックをダウンロードして、
vmss-scale-out.yml
に保存する。vmss-scale-out.yml
という名前で新しいファイルを作成します。 次のコードを新しいファイルに挿入します。
---
- hosts: localhost
gather_facts: false
vars:
resource_group: myTestRG
vmss_name: myTestVMSS
tasks:
- name: Get scaleset info
azure_rm_virtualmachine_scaleset_facts:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
format: curated
register: output_scaleset
- name: set image fact
set_fact:
vmss_image: "{{ output_scaleset.vmss[0].image }}"
- name: Create VMSS
no_log: true
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
capacity: 3
image: "{{ vmss_image }}"
ansible-playbook を使用してプレイブックを実行します
ansible-playbook vmss-scale-out.yml
プレイブックを実行すると、次の結果のような出力が表示されます。
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Get scaleset info]
ok: [localhost]
TASK [Set image fact]
ok: [localhost]
TASK [Change VMSS capacity]
changed: [localhost]
PLAY RECAP
localhost : ok=3 changed=1 unreachable=0 failed=0
結果を確認する
次のように、Azure portal を使用して作業の結果を確認します。
Azure portal にサインインします。
構成したスケール セットに移動します。
次のように、インスタンスの数がかっこ内に入ったスケール セット名を確認できます。
Standard_DS1_v2 (3 instances)
次のコマンドを実行して、Azure Cloud Shell で変更を検証することもできます。
az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}'
Cloud Shell で Azure CLI コマンドを実行した結果には、現在 3 つのインスタンスが存在することが示されています。
{ "capacity": 3, }