重要
この記事のサンプル プレイブックを実行するには、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, }