# # サンプルテンプレート: 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