Update the Template

Using your preferred text editor open the Apache Web Server template you created in the previous tutorial.

Define Auto Scaling Policy

In this tutorial 2 auto scaling policies will be defined to auto scale the Apache Web Server. Refer to the Auto scaling section in this document for reference.

  • A scale up will be performed when the last 3 consecutive periods of cpu idle time are less than 20%.
  • A scale down will be performed when the last 2 consecutive periods of cpu idle time are greater than 80%.

Add the following statements to the Apache Web Server template at the end of the file. Make sure the groups: statement is aligned exactly with the topology_template statement (same indentation). The members: statement must specify the node_template name of the Apache Web Server (web_vm).

  ###################################################################################################################################################
  # This group defines the auto scaling and auto healing policies for the Apache Web server (web_vm)
  ###################################################################################################################################################
  groups:
    scaling_and_healing_group:
      members: [web_vm]                            # The node_template with the statement named "web_vm" is in this group
      properties:
        instances: 1                               # Launch 1 server when the stack is started
        minInstances: 1                            # The minimum number of servers
        maxInstances: 5                            # The maximum number of servers
        coolDown: 300                              # The number of seconds to wait before performing a auto scale or auto repair operation.

      policies:
        # This scale up policy will perform a scale up when the last 3 periods of idle time reported are < 20%
        scale_up_on_cpu:
          type: dcm.policy.types.BasicPolicy
          actions: [scale_up]                      # The scale_up action is defined in the actions: section of the template
          measurement: cpu_idle_time               # The cpu_idle_time label is defined in the measurements: section of the template
          criterion: less_than_20                  # The less_than_20 is a label defined in the criteria: section of the template

        # This scale down policy will perform a scale down when the last 2 periods of idle time reported are > 80%
        scale_down_on_cpu:
          type: dcm.policy.types.BasicPolicy
          actions: [scale_down]                    # The scale_down action is defined in the actions: section of the template
          measurement: cpu_idle_time               # The cpu_idle_time label is defined in the measurements: section of the template
          criterion: more_than_80                  # The more_than_80 is a label defined in the criteria: section of the template

      # Actions define the details of the various actions that could be taken.
      actions:
        scale_up:                                  # The scale_up action label is referenced in the policy in the actions[] statement
          type: dcm.policy.action.ScaleUpGroup
          properties:
            instances: 1                           # The number of resources to scale up on a scale_up action
            changeType: ADD                        # Add resource(s) on a scale_up action
            recordTask: RESOURCES_CHANGE           # Check to see if the scale up action would actually create a new resource, 
                                                   # or a scale-down operation would actually destroy a resource before creating a task to perform the action.

        scale_down:                                # The scale_down action label is referenced in the policy in the actions[] statement
          type: dcm.policy.action.ScaleDownGroup
          properties:
            instances: 1                           # The number of resources to scale down on a scale_down action 
            changeType: REMOVE                     # Remove resource(s) on a scale_down action
            recordTask: ALWAYS                     # Always attempt to perform a scale up or scale down action when the policy determines the actions should occur.
                                                   # Do not check the minInstances and maxInstances limits beforehand.

          type: dcm.policy.action.ReplaceResource                                           

      # Measurements define the "measurements" used to determine when to perform the actions
      measurements:
        cpu_idle_time:                             # The cpu_idle_time measurements label is referenced in the policy in a measurements: statement
        # The Dell Cloud Manager agent will collect and store the last 15 samples of cpu %idle time measured in 30-second intervals
          type: dcm.policy.measurement.CpuIdle
          properties:
            period: 30                             # Take a measurement every 30 seconds
            count: 15                              # Take 15 measurements

      # Criteria specify the "criteria" which is used along with the measurements to determine when to perform the actions
      criteria:
        less_than_20:                              # The less_than_20 criteria label is referenced in the policy in a criterion: statement
          type: dcm.policy.criteria.SeriesLessThan
          properties:
            count: 3                               # 3 consecutive periods 
            threshold: 20                          # Threshold is 20% 

        more_than_80:                              # The more_than_80 criteria label is referenced in the policy in a criterion: statement 
          type: dcm.policy.criteria.SeriesMoreThan
          properties: 
            count: 2                               # 2 consecutive periods
            threshold: 80                          # Threshold is 80%

Define Auto Healing Policy

Now lets add an auto healing policy to the template.

Add the following statements inside the policy: section and align them with the two scaling policies.

repair_on_status:
  type: dcm.policy.types.BasicPolicy
  measurement: cloud_reported_status
  criterion: check_fails
  actions: [repair]

Add the following statements inside the actions: section and align it with the two scaling actions.

repair:                                    # This auto healing action will terminate a degraded resource and then create a new resource
  type: dcm.policy.action.ReplaceResource

Add the following statements inside the measurements: section and align them with the two scaling measurements.

cloud_reported_status:
  type: dcm.policy.measurement.ResourceActive

Lastly add the following statements inside the criteria: section and align them with the two scaling criteria.

check_fails:                               # This is the criteria for auto healing
  type: dcm.policy.criteria.False          # "False" tells the policy to perform the action in the policy if the measurement result matches "False".