FUJITSU Cloud Service K5
IaaS 設計・構築ガイド(デザインパターン・実装サンプル集)

autoscale_template_sample.yaml

#
# サンプルテンプレート: stacktest20160627a
#
#  ・ロードバランサーを Standard で配備
#  ・仮想サーバを2台、 S-1 で配備
#  ・仮想サーバの CPU 使用率でスケールアウト/スケールインを実施
#  CPU使用率の 平均 が 50% を上回ったら、仮想サーバを1台増設
#  CPU使用率の 平均 が 15% を下回ったら、仮想サーバを1台減設
#  ・ヘルスチェック異常時に、仮想サーバを復旧
#


# 固定
heat_template_version: 2013-05-23


description:
  Autoscaling test HOT.


# 各項目に値を設定
parameters:


  # AZを設定
  az:
    # AZ1:"jp-east-1a"
    # AZ2:"jp-east-1b"
    type: string
    default: jp-east-1b


  # サブネットIDを設定
  subnet-id:
    type: string
   #default: "********-****-****-****-************"
    default: "dd49244c-92ef-40a7-a6c0-bfea3c3afdbd"


  # イメージIDを設定
  param-image-id:
    type: string
   #default: "********-****-****-****-************"
    default: "674ff278-1587-411e-8027-ab6a6ae1ca23"


  # フレーバーを設定
  param-flavor:
    type: string
   #default: (フレーバーを「S-1」「S-2」「S-4」「S-8」「S-16」の中から選択します。)
    default: S-1


  # キーペアを設定
  key-name:
    type: string
    description: SSH key to connect to the servers
   #default: (任意のキーペア名)
    default: cdp_keypair2


  # 仮想サーバ用セキュリティグループを設定
  autoscale-security-group:

    # type を comma_delimited_list とすると
    # csv形式で複数指定可能
    type: comma_delimited_list

   #default: (任意のセキュリティグループ名またはID)
    default: ["SG_default","SG_Web_Local","SG_Maintenance"]


  # ロードバランサー用セキュリティグループをIDで設定
  lb-security-group:

    # type を comma_delimited_list とすると
    # csv形式で複数指定可能
    type: comma_delimited_list

   #default: (任意のセキュリティグループID)
    default: ["e41b2ff9-cb46-4015-b2a8-8f44c7937be2","b086168d-4329-4f1c-8c91-fffbda9c4802"]


  # ロードバランサー名
  lb-name:
    type: string
    default: 'stacktest20160627a-LB'



resources:


  # オートスケールするサーバ群のグループ化設定
  web-server-group:
    type: FCX::AutoScaling::AutoScalingGroup
    properties:


      # AZの設定を get_resource で参照
      AvailabilityZones: [{get_param: az}]


      # 仮想サーバの設定を get_resource で参照
      LaunchConfigurationName: {get_resource: launch_config}


      # 最小2台、最大6台で設定
      MinSize: '2'
      MaxSize: '6'


      # 仮想サーバを配備するサブネットを指定
      VPCZoneIdentifier: [{get_param: subnet-id}]


      # ロードバランサーによるヘルスチェックを有効に設定
      HealthCheckGracePeriod: '120'
      HealthCheckType: 'ELB'
      Cooldown: '750'


      # ロードバランサーの設定を get_resource で参照
      LoadBalancerNames:
      - {get_resource: fj-elb}


  # 仮想サーバの起動設定
  launch_config:
    type: FCX::AutoScaling::LaunchConfiguration

    # 上記 parameters: で設定した各項目の値を get_param で取得
    properties:


      # 仮想サーバのイメージID
      ImageId: { get_param: param-image-id }


      # 仮想サーバのフレーバー
      InstanceType: { get_param: param-flavor }


      # 仮想サーバのキーペア
      KeyName: {get_param: key-name}


      # 仮想サーバのセキュリティグループ
      SecurityGroups: {get_param: autoscale-security-group}


      # 起動する仮想サーバにアタッチするブロックストレージに関する
      # ブロックデバイスマッピングを設定
      # "boot_index" が "0" 	→起動ディスク
      BlockDeviceMappingsV2: [{source_type: 'image', destination_type: 'volume', boot_index: '0', device_name: '/dev/vda',  volume_size: '40', uuid: {get_param: param-image-id}, delete_on_termination: true}]


      # ドキュメントルート(/var/www/html) 配下の index.html に
      # ホスト名を設定し、Webサーバを起動するスクリプトを設定
      UserData: |
        #!/bin/sh
        /bin/hostname | cut -d'.' -f1 > /var/www/html/index.html
        /bin/chmod 644                  /var/www/html/index.html
        /opt/lampp/bin/apachectl -k start -E /opt/lampp/logs/error_log



  # ロードバランサーの起動設定
  fj-elb:
    type: FCX::ExpandableLoadBalancer::LoadBalancer

    # 上記 parameters: で設定した各項目の値を get_param で取得
    properties:


      # ロードバランサーを配備するサブネット
      Subnets: [{get_param: subnet-id}]


      # ロードバランサーのセキュリティグループ
      SecurityGroups: {get_param: lb-security-group}


      # ロードバランサーのリスナーの設定
      # ロードバランサーは80/tcpで待ち受け、仮想サーバの81/tcpに転送
      # ロードバランサーのプロトコルは'HTTP'、仮想サーバのプロトコルは'HTTP'
      Listeners:
      - {LoadBalancerPort: '80', InstancePort: '81',
        Protocol: 'HTTP', InstanceProtocol: 'HTTP' }


      # ヘルスチェック設定
      # 仮想サーバに 81/tcp で /index.html を取得
      HealthCheck: {Target: 'HTTP:81/index.html', HealthyThreshold: '3',
                   UnhealthyThreshold: '3', Interval: '10', Timeout: '5'}
      Version: 2014-09-30


      # 内部用ロードバランサー設定
      Scheme: internal


      # ロードバランサー名
      LoadBalancerName: { get_param: lb-name }


  # 仮想サーバのスケールアウトポリシー
  web_server_scaleout_policy:
    type: FCX::AutoScaling::ScalingPolicy
    properties:


      # 仮想サーバの増減タイプ
      # "ChangeInCapacity" の場合、"ScalingAdjustment" で指定した数を追加/削除する
      AdjustmentType: ChangeInCapacity


      # スケーリングポリシーを設定するスケーリンググループを get_resource で設定
      AutoScalingGroupName: {get_resource: web-server-group}

      # 前回のスケーリング処理実行後、次のスケーリング処理がすぐ行われないよう、
      # 抑止する時間を秒単位で設定
      ### Cooldown: '60'


      # 仮想サーバの増減数
      # "AdjustmentType: ChangeInCapacity" の場合、
      # "ScalingAdjustment" で指定した数を追加/削除する
      # 以下の場合は、1台追加となる
      ScalingAdjustment: '1'


  # 仮想サーバのスケールインポリシー
  web_server_scalein_policy:
    type: FCX::AutoScaling::ScalingPolicy
    properties:


      # 仮想サーバの増減タイプ
      # "ChangeInCapacity" の場合、"ScalingAdjustment" で指定した数を追加/削除する
      AdjustmentType: ChangeInCapacity


      # スケーリングポリシーを設定するスケーリンググループを get_resource で設定
      AutoScalingGroupName: {get_resource: web-server-group}

      # 前回のスケーリング処理実行後、次のスケーリング処理がすぐ行われないよう、
      # 抑止する時間を秒単位で設定
      ### Cooldown: '60'


      # 仮想サーバの増減数
      # "AdjustmentType: ChangeInCapacity" の場合、
      # "ScalingAdjustment" で指定した数を追加/削除する
      # 以下の場合は、1台削除となる
      ScalingAdjustment: '-1'


  # 異常仮想サーバの自動復旧用ポリシー
  web_server_recovery_policy:
    type: FCX::AutoScaling::ScalingPolicy
    properties:


      # 仮想サーバの増減タイプ
      # "ChangeInCapacity" の場合、"ScalingAdjustment" で指定した数を追加/削除する
      AdjustmentType: ChangeInCapacity


      # スケーリングポリシーを設定するスケーリンググループを get_resource で設定
      AutoScalingGroupName: {get_resource: web-server-group}

      # 前回のスケーリング処理実行後、次のスケーリング処理がすぐ行われないよう、
      # 抑止する時間を秒単位で設定
      ### Cooldown: '60'


      # 仮想サーバの増減数
      # "AdjustmentType: ChangeInCapacity" の場合、
      # "ScalingAdjustment" で指定した数を追加/削除する
      # 以下の場合は、1台追加となる
      ScalingAdjustment: '1'


  # スケールアウト/スケールインの契機となる仮想サーバの cpu の使用率の条件設定
  # 高使用率を設定
  cpu_alarm_high:

    # アラームを設定
    type: OS::Ceilometer::Alarm
    properties:

      # CPU 使用率が 50% を上回っている時間が 1分経過した場合
      description: Scale-up if the average CPU > 50% for 1 minute


      # 仮想サーバのCPU使用率を監視するアラームを設定
      meter_name: fcx.compute.cpu_util


      # 統計種別:使用率は avg(平均値) を測定
      statistic: avg


      # 60秒間
      period: '60'


      # アラーム判定回数(しきい値超えの回数)
      evaluation_periods: '1'


      # しきい値:50%
      threshold: '50'


      # しきい値超えと判定した際に行うアクション
      alarm_actions:
      - {get_attr: [web_server_scaleout_policy, AlarmUrl]}


      # メタデータ検索条件(監視対象を設定)
      # AutoScalingGroup内の仮想サーバのCPU使用率などを監視する場合は、
      # キーに metadata.user_metadata.groupname 、
      # 値に AutoScalingGroupリソースを指定
      # 
      # ロードバランサーのヘルスチェックにより、
      # 異常仮想サーバの自動復旧を使用する場合は、
      # キーに resource_id 、
      # 値にロードバランサーの名前を指定
      matching_metadata: {'metadata.user_metadata.groupname': {get_resource: 'web-server-group'}}


      # 条件判定式
      # eq:等しい
      # ne:等しくない
      # ge:以上
      # gt:より大きい場合
      # le:以下
      # lt:より小さい場合
      comparison_operator: gt


  # スケールアウト/スケールインの契機となる仮想サーバの cpu の使用率の条件設定
  # 低使用率を設定
  cpu_alarm_low:

    # アラームを設定
    type: OS::Ceilometer::Alarm
    properties:

      # CPU 使用率が 15% を下回っている時間が 1分経過した場合
      description: Scale-down if the average CPU < 15% for 1 minute


      # 仮想サーバのCPU使用率を監視するアラームを設定
      meter_name: fcx.compute.cpu_util


      # 統計種別:使用率は avg(平均値) を測定
      statistic: avg


      # 60秒間
      period: '60'


      # アラーム判定回数(しきい値超えの回数)
      evaluation_periods: '1'


      # しきい値:15%
      threshold: '15'


      # しきい値超えと判定した際に行うアクション
      alarm_actions:
      - {get_attr: [web_server_scalein_policy, AlarmUrl]}


      # メタデータ検索条件(監視対象を設定)
      # AutoScalingGroup内の仮想サーバのCPU使用率などを監視する場合は、
      # キーに metadata.user_metadata.groupname 、
      # 値に AutoScalingGroupリソースを指定
      # 
      # ロードバランサーのヘルスチェックにより、
      # 異常仮想サーバの自動復旧を使用する場合は、
      # キーに resource_id 、
      # 値にロードバランサーの名前を指定
      matching_metadata: {'metadata.user_metadata.groupname': {get_resource: 'web-server-group'}}


      # 条件判定式
      # eq:等しい
      # ne:等しくない
      # ge:以上
      # gt:より大きい場合
      # le:以下
      # lt:より小さい場合
      comparison_operator: lt


  # ヘルスチェックの条件設定
  elb_status_abnormal:

    # アラームを設定
    type: OS::Ceilometer::Alarm
    properties:

      # ロードバランサーのステータスで仮想サーバが異常の場合
      description: elb_unhealty_recovery


      # ヘルスチェックのアラームを設定
      meter_name: fcx.loadbalancing.instance.unhealthy


      # 統計種別:異常となった仮想サーバ数を数えるよう、"min"を指定
      statistic: min


      # 60秒間
      period: '60'


      # アラーム判定回数(しきい値超えの回数)
      evaluation_periods: '1'


      # アクション繰り返し
      # ヘルスチェック機能を使用する場合は"true"を指定
      repeat_actions: true


      # しきい値:しきい値となる異常仮想サーバの数を指定、'1' なら、1台でも異常となればスケールアウト
      threshold: '1'


      # しきい値超えと判定した際に行うアクション
      alarm_actions:
      - {get_attr: [web_server_recovery_policy, AlarmUrl]}


      # メタデータ検索条件(監視対象を設定)
      # AutoScalingGroup内の仮想サーバのCPU使用率などを監視する場合は、
      # キーに metadata.user_metadata.groupname 、
      # 値に AutoScalingGroupリソースを指定
      # 
      # ロードバランサーのヘルスチェックにより、
      # 異常仮想サーバの自動復旧を使用する場合は、
      # キーに resource_id 、
      # 値にロードバランサーの名前を指定
      matching_metadata: { 'resource_id': {get_param: lb-name}}


      # 条件判定式
      # eq:等しい
      # ne:等しくない
      # ge:以上
      # gt:より大きい場合
      # le:以下
      # lt:より小さい場合
      comparison_operator: ge