チュートリアル: Ansible を使用して Azure の仮想マシン スケール セットを自動的にスケーリングする

重要

この記事のサンプル プレイブックを実行するには、Ansible 2.7 (以降) が必要です。

Azure Virtual Machine Scale Sets は、負荷分散が行われる同一の VM のグループを構成するための Azure 機能です。 スケール セットに追加コストはなく、仮想マシンから構築されます。 ユーザーは、VM インスタンス、ロード バランサー、マネージド ディスク ストレージなど、基本的なコンピューティング リソースに対してのみ支払います。 スケール セットには、アプリケーションの実行とスケーリングを行うための管理レイヤーと自動化レイヤーがあります。 代わりに手動で個々 の VM を作成し管理できます。 ただし、スケール セットの使用には、2 つの主な利点があります。 それらは Azure に組み込まれ、アプリケーションのニーズを満たすように自動的に仮想マシンを拡大縮小します。

VM インスタンスの数を自動的に調整する機能を自動スケールと呼びます。 自動スケールのメリットは、アプリケーションのパフォーマンスを監視して最適化するための管理上のオーバーヘッドが削減されることです。 自動スケールは、要求に応じて構成することも、定義されたスケジュールで構成することもできます。 Ansible を使用して、肯定的なカスタマー エクスペリエンスを得られる、許容可能なパフォーマンスを定義する自動スケール ルールを指定することができます。

この記事では、次のことについて説明します。

  • 自動スケール プロファイルの定義
  • 定期的なスケジュールに基づいた自動スケール
  • アプリのパフォーマンスに基づいた自動スケール
  • 自動スケール設定情報の取得
  • 自動スケール設定の無効化

前提条件

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

スケジュールに基づいた自動スケール

スケール セットで自動スケールを有効にするには、最初に自動スケール プロファイルを定義します。 このプロファイルでは、スケール セット容量の既定値、最小値、および最大値が定義されます。 これらの制限により、VM インスタンスが継続的に作成されないようにしてコストを制御し、許容されるパフォーマンスと、スケールイン イベントに残るインスタンスの最小数のバランスをとることができます。

Ansible を使用すると、特定の日付または定期的なスケジュールでスケール セットをスケーリングできます。

このセクションのプレイブック コードでは、毎週月曜日の 10 時 00 分に VM インスタンスの数を 3 つに増やします。

次のプレイブックを vmss-auto-scale.yml という名前で保存します。

---
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
    name: autoscalesetting
  tasks: 
    - name: Create autoscaling
      azure_rm_autoscale:
         resource_group: "{{ resource_group }}"
         name: "{{ name }}"
         target:
           namespace: "Microsoft.Compute"
           types: "virtualMachineScaleSets"
           name: "{{ vmss_name }}"
         enabled: true
         profiles:
         - count: '3'
           min_count: '3'
           max_count: '3'
           name: Auto created scale condition
           recurrence_timezone: Pacific Standard Time
           recurrence_frequency: Week
           recurrence_days:
              - Monday
           recurrence_mins:
              - '0'
           recurrence_hours:
              - '10'

ansible-playbook を使用してプレイブックを実行します

ansible-playbook vmss-auto-scale.yml

パフォーマンス データに基づく自動スケーリング

アプリケーションの需要が増加すると、スケール セット内の VM インスタンスに対する負荷が増加します。 この増加した負荷が短期的な需要ではなく持続したものである場合は、スケール セット内の VM インスタンスの数を増やす自動スケール ルールを構成できます。 これらの VM インスタンスが作成され、アプリケーションがデプロイされると、スケール セットはロード バランサーを通じてそれらへのトラフィックの分散を開始します。 Ansible を使用すると、監視するメトリック (CPU 使用率、ディスク使用量、アプリの読み込み時間など) を制御できます。 パフォーマンス メトリックのしきい値、定期的なスケジュール、または特定の日付に基づいて、スケール セットでスケールインやスケールアウトを行うことができます。

このセクションのプレイブック コードでは、毎週月曜日の 18 時 00 分に過去 10 分間の CPU ワークロードをチェックします。

このプレイブックでは、CPU 使用率のメトリックに基づいて次のいずれかのアクションを実行します。

  • VM インスタンスの数を 4 にスケールアウトする
  • VM インスタンスの数を 1 にスケールインする

次のプレイブックを vmss-auto-scale-metrics.yml という名前で保存します。

---
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
    name: autoscalesetting
  tasks:
  - name: Get facts of the resource group
    azure_rm_resourcegroup_facts:
      name: "{{ resource_group }}"
    register: rg

  - name: Get scale set resource uri
    set_fact:
      vmss_id: "{{ rg.ansible_facts.azure_resourcegroups[0].id }}/providers/Microsoft.Compute/virtualMachineScaleSets/{{ vmss_name }}"
    
  - name: Create autoscaling
    azure_rm_autoscale:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      target: "{{ vmss_id }}"
      enabled: true
      profiles:
      - count: '1'
        max_count: '1'
        min_count: '1'
        name: 'This scale condition is executed when none of the other scale condition(s) match'
        recurrence_days:
          - Monday
        recurrence_frequency: Week
        recurrence_hours:
          - 18
        recurrence_mins:
          - 0
        recurrence_timezone: Pacific Standard Time
      - count: '1'
        min_count: '1'
        max_count: '4'
        name: Auto created scale condition
        recurrence_days:
          - Monday
        recurrence_frequency: Week
        recurrence_hours:
          - 18
        recurrence_mins:
          - 0
        recurrence_timezone: Pacific Standard Time
        rules:
          - cooldown: 5
            direction: Increase
            metric_name: Percentage CPU
            metric_resource_uri: "{{ vmss_id }}"
            operator: GreaterThan
            statistic: Average
            threshold: 70
            time_aggregation: Average
            time_grain: 1
            time_window: 10
            type: ChangeCount
            value: '1'
          - cooldown: 5
            direction: Decrease
            metric_name: Percentage CPU
            metric_resource_uri: "{{ vmss_id }}"
            operator: LessThan
            statistic: Average
            threshold: 30
            time_aggregation: Average
            time_grain: 1
            time_window: 10
            type: ChangeCount
            value: '1'

ansible-playbook を使用してプレイブックを実行します

ansible-playbook vmss-auto-scale-metrics.yml

自動スケール設定情報の取得

このセクションのプレイブック コードでは、azure_rm_autoscale_facts モジュールを使用して自動スケール設定の詳細を取得します。

次のプレイブックを vmss-auto-scale-get-settings.yml という名前で保存します。

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    name: autoscalesetting
  tasks: 
    - name: Retrieve autoscale settings information
      azure_rm_autoscale_facts:
        resource_group: "{{ resource_group }}"
        name: "{{ name }}"
      register: autoscale_query
    
    - debug:
        var: autoscale_query.autoscales[0]

ansible-playbook を使用してプレイブックを実行します

ansible-playbook vmss-auto-scale-get-settings.yml

自動スケール設定の無効化

自動スケール設定を無効にするには 2 つの方法があります。 1 つは enabled キーを true から false に変更する方法です。 もう 1 つは設定を削除する方法です。

このセクションのプレイブック コードでは、自動スケール設定を削除します。

次のプレイブックを vmss-auto-scale-delete-setting.yml という名前で保存します。

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    name: autoscalesetting
  tasks: 
    - name: Delete autoscaling
      azure_rm_autoscale:
         resource_group: "{{ resource_group }}"
         name: "{{ name }}"
         state: absent

ansible-playbook を使用してプレイブックを実行します

vmss-auto-scale-delete-setting.yml

次のステップ