{"text_format":"1","workbook":"xlsx","n_sheets":3,"sheets":["Scaling Optimizer","ScheduledScaling Optimizer","Constants"],"not_rendered":{"charts":0,"images":0,"macros":1,"external_links":0,"defined_names":1,"comments":3,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"Scaling Optimizer","index":0,"n_rows":51,"n_cols":3,"rows_kept":51,"cut":false,"hidden":false,"merged":[[50,0,50,2],[2,1,2,2],[3,0,3,2],[30,0,30,2],[31,1,31,2],[49,0,49,2]]}
["Appstream 2.0 AutoScaling Policy Optimizer Tool"]
["Version: 1.0"]
["You can download the latest version of the pricing tool:","In progress"]
["The Amazon AppStream 2.0 Autoscaling policy Optimizer tool aims to help customers reduce costs by minimizing over-provisioning while ensuring sufficient capacity to meet user demand. This tool assists in:\n    Analyzing usage data\n    Identifying peak usage periods\n    Suggesting appropriate minimum and maximum fleet capacity\n    Recommending scaling thresholds based on metrics"]
["User inputs are in BLUE","Calculated fields are in GRAY","Calculator output estimates are in GREEN"]
["User Information"]
["Total unique users in your organization:"]
["Max number of sessions per instance:",1]
["Fleet Scaling Options"]
["Buffer capacity as % of concurrency:"]
["Multiple Policies"]
["Fixed Schedule"]
["Min Users",1]
["Max Users",1]
["Scaling Policy Metric"]
["Scale Out"]
["Metric"]
["Comparison Operator"]
["Threshold "]
["Threshold Unit"]
["Adjustment type"]
["Adjustment value"]
["Scale in  "]
["Metric"]
["Comparison Operator"]
["Threshold "]
["Threshold Unit"]
["Adjustment  type"]
["Adjustment value"]
[]
["Note Autoscaling Metric Selection Recommendation/Reference:\nCapacity Utilization - Efficient Resource Utilization\nAvailable Capacity - Consistent Service Availability\nInsufficient Capacity Error - Preventing User rejection or maintaining App Availability \nAvailable User Session Capacity - Consistent User session Availability"]
[null,"Outputs"]
["Desired UserSession Capacity",{"$f":"B13","v":1}]
["Buffer UserSession Capacity",{"$f":"B14+(B14*B10/100)","v":1}]
["Total UserSession Capacity",{"$f":"B33+B34","v":2}]
["Min Fleet Capacity",{"$f":"ROUNDUP($B13/B8,0)","v":1}]
["Max Fleet Capacity",{"$f":"ROUNDUP($B14/B8,0)","v":1}]
[null,"Scaling Policy"]
["Scale Out",{"$f":" _xlfn.CONCAT(\" Increase the Capacity by \",B22, \" instances when the Utilization is above \", B18, \" %\")","v":" Increase the Capacity by  instances when the Utilization is above  %"}]
["Scale In",{"$f":" _xlfn.CONCAT(\" Decrease the Capacity by \", B29,\" instances when the Utilization is above \", B25, \" %\")","v":" Decrease the Capacity by  instances when the Utilization is above  %"}]
["Scaling Policy Recommendations"]
[]
["Policy Type",{"$f":"IF(B9=\"Fixed Fleet Scaling based on Schedule\",\"Schedule Scaling\",IF(B9=\"Fleet Auto scaling\",\"Fleet Autoscaling\"))","v":false}]
["Desired Capacity",{"$f":"B33","v":1}]
["Minimum Instances/User sessions",{"$f":"B13","v":1}]
["Maximum Instances/User sessions",{"$f":"B14+B14*B10/100","v":1}]
["Scale Out Policies"]
["Scale In Policies"]
["Scheduled Scaling Policies",{"$f":"IF(B12=\"Extended Hours (7AM - 10PM)\",\n    \"Schedule: Increase capacity to desired value at 7AM, decrease to minimum at 10PM\",\n    IF(B12=\"Custom\",\n        CONCATENATE(\"Schedule: Increase capacity at \", TEXT(#REF!,\"hh:mm AM/PM\"), \", decrease at \", TEXT(#REF!,\"hh:mm AM/PM\")),\n        \"No scheduled scaling needed\"))","v":"No scheduled scaling needed"}]
["Note Autoscaling Type:\nScale In - The automatic reduction of running instances in your fleet when demand decreases\nScale Out - The automatic addition of instances to your fleet when demand increases\nScheduled Scaling - Predetermined scaling actions that occur at specified dates and times\nTarget Tracking -  Scaling based on maintaining a specific target value for a metric"]
["Best Practices:\n    Set reasonable minimum and maximum capacity limits\n    Combine different scaling types for optimal results\n    Regularly review and adjust scaling policies\n    Monitor scaling activities through CloudWatch metrics\n\nThere are two limits to consider:\nFor a single fleet, AppStream 2.0 provisions at a maximum rate of 20 instances per minute.\nFor a single AWS account, AppStream 2.0 provisions at a rate of rate of 60 instances per minute (with a burst of 100 instances per minute)."]

{"sheet":"ScheduledScaling Optimizer","index":1,"n_rows":45,"n_cols":9,"rows_kept":45,"cut":false,"hidden":false,"merged":[[0,0,0,2],[11,1,12,8],[1,0,1,8],[0,3,0,8],[13,0,13,1],[13,2,13,3]]}
["Detailed Scheduled Scaling Optimizer"]
[]
["Users per Instance",1]
["% Buffer"]
["Scale Out Threshold"]
["Scale In Threshold"]
[]
["Minimum Instances",{"$f":"MIN(F22:F45)","v":1}]
["Maximum Instances ",{"$f":"MAX(F22:F45)","v":3}]
["Minimum User Sessions",{"$f":"MIN(C22:C45)","v":1}]
["Maximum User Sessions",{"$f":"MAX(C22:C45)","v":2.9249999999999998}]
["Scaling Policy Recommendations"]
[]
["Single Session Output",null,"Multisession Output"]
["Maximum sessions per instance",1,"Maximum sessions per instance",{"$f":"B3","v":1}]
["Desired Instances",{"$f":"B17","v":1},"Desired user sessions",{"$f":"D17","v":1}]
["Minimum Instances",{"$f":"B8","v":1},"Minimum user sessions for fleet",{"$f":"B10","v":1}]
["Maximum Instances",{"$f":"B9","v":3},"Maximum user sessions for fleet",{"$f":"B11+(B11*B4/100)","v":2.9249999999999998}]
[]
[]
["Start Time","End Time","Concurrent Users in each hour","Number of required instances","Buffer instances","Total Instances","Scale Out Threshold","Scale In Threshold","Comments"]
["06:00:00","07:00:00",{"$f":"'Scaling Optimizer'!B13","v":1},{"$f":"ROUNDUP($C22/B3,0)","v":1},{"$f":"ROUNDUP($D22*B4/100,0)","v":0},{"$f":"D22+E22","v":1},{"$f":"ROUNDUP(F22*B5/100,0)","v":0},{"$f":"ROUNDUP(F22*B6/100,0)","v":0}]
["07:00:00","08:00:00",{"$f":"C22+(C22*50/100)","v":1.5},{"$f":"ROUNDUP($C23/B3,0)","v":2},{"$f":"ROUNDUP($D23*B4/100,0)","v":0},{"$f":"D23+E23","v":2},{"$f":"ROUNDUP(F23*B5/100,0)","v":0},{"$f":"ROUNDUP(F23*B6/100,0)","v":0}]
["08:00:00","09:00:00",{"$f":"C23+(C23*95/100)","v":2.9249999999999998},{"$f":"ROUNDUP($C24/B3,0)","v":3},{"$f":"ROUNDUP($D24*B4/100,0)","v":0},3,{"$f":"ROUNDUP(F24*B5/100,0)","v":0},{"$f":"ROUNDUP(F24*B6/100,0)","v":0}]
["09:00:00","10:00:00",{"$f":"'Scaling Optimizer'!B14","v":1},{"$f":"ROUNDUP($C25/B3,0)","v":1},{"$f":"ROUNDUP($D25*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F25*B5/100,0)","v":0},{"$f":"ROUNDUP(F25*B6/100,0)","v":0}]
["10:00:00","11:00:00",{"$f":"C25","v":1},{"$f":"ROUNDUP($C26/B3,0)","v":1},{"$f":"ROUNDUP($D26*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F26*B5/100,0)","v":0},{"$f":"ROUNDUP(F26*B6/100,0)","v":0}]
["11:00:00","12:00:00",{"$f":"C26","v":1},{"$f":"ROUNDUP($C27/B3,0)","v":1},{"$f":"ROUNDUP($D27*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F27*B5/100,0)","v":0},{"$f":"ROUNDUP(F27*B6/100,0)","v":0}]
["12:00:00","13:00:00",{"$f":"C27","v":1},{"$f":"ROUNDUP($C28/B3,0)","v":1},{"$f":"ROUNDUP($D28*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F28*B5/100,0)","v":0},{"$f":"ROUNDUP(F28*B6/100,0)","v":0}]
["13:00:00","14:00:00",1,{"$f":"ROUNDUP($C29/B3,0)","v":1},{"$f":"ROUNDUP($D29*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F29*B5/100,0)","v":0},{"$f":"ROUNDUP(F29*B6/100,0)","v":0}]
["14:00:00","15:00:00",1,{"$f":"ROUNDUP($C30/B3,0)","v":1},{"$f":"ROUNDUP($D30*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F30*B5/100,0)","v":0},{"$f":"ROUNDUP(F30*B6/100,0)","v":0}]
["15:00:00","16:00:00",1,{"$f":"ROUNDUP($C31/B3,0)","v":1},{"$f":"ROUNDUP($D31*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F31*B5/100,0)","v":0},{"$f":"ROUNDUP(F31*B6/100,0)","v":0}]
["16:00:00","17:00:00",1,{"$f":"ROUNDUP($C32/B3,0)","v":1},{"$f":"ROUNDUP($D32*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F32*B5/100,0)","v":0},{"$f":"ROUNDUP(F32*B6/100,0)","v":0}]
["17:00:00","18:00:00",1,{"$f":"ROUNDUP($C33/B3,0)","v":1},{"$f":"ROUNDUP($D33*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F33*B5/100,0)","v":0},{"$f":"ROUNDUP(F33*B6/100,0)","v":0}]
["18:00:00","19:00:00",1,{"$f":"ROUNDUP($C34/B3,0)","v":1},{"$f":"ROUNDUP($D34*B4/100,0)","v":0},1,{"$f":"ROUNDUP(F34*B5/100,0)","v":0},{"$f":"ROUNDUP(F34*B6/100,0)","v":0}]
["19:00:00","20:00:00",{"$f":"C24","v":2.9249999999999998},{"$f":"ROUNDUP($C35/B3,0)","v":3},{"$f":"ROUNDUP($D35*B4/100,0)","v":0},3,{"$f":"ROUNDUP(F35*B5/100,0)","v":0},{"$f":"ROUNDUP(F35*B6/100,0)","v":0}]
["20:00:00","21:00:00",2.9249999999999998,{"$f":"ROUNDUP($C36/B3,0)","v":3},{"$f":"ROUNDUP($D36*B4/100,0)","v":0},3,{"$f":"ROUNDUP(F36*B5/100,0)","v":0},{"$f":"ROUNDUP(F36*B6/100,0)","v":0}]
["21:00:00","22:00:00",2.9249999999999998,{"$f":"ROUNDUP($C37/B3,0)","v":3},{"$f":"ROUNDUP($D37*B4/100,0)","v":0},3,{"$f":"ROUNDUP(F37*B5/100,0)","v":0},{"$f":"ROUNDUP(F37*B6/100,0)","v":0}]
["22:00:00","23:00:00",{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C38/B3,0)","v":2},{"$f":"ROUNDUP($D38*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F38*B5/100,0)","v":0},{"$f":"ROUNDUP(F38*B6/100,0)","v":0}]
["23:00:00",1,{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C39/B3,0)","v":2},{"$f":"ROUNDUP($D39*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F39*B5/100,0)","v":0},{"$f":"ROUNDUP(F39*B6/100,0)","v":0}]
[1,1.0416666666666701,{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C40/B3,0)","v":2},{"$f":"ROUNDUP($D40*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F40*B5/100,0)","v":0},{"$f":"ROUNDUP(F40*B6/100,0)","v":0}]
[1.0416666666666701,1.0833333333333299,{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C41/B3,0)","v":2},{"$f":"ROUNDUP($D41*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F41*B5/100,0)","v":0},{"$f":"ROUNDUP(F41*B6/100,0)","v":0}]
[1.0833333333333299,1.125,{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C42/B3,0)","v":2},{"$f":"ROUNDUP($D42*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F42*B5/100,0)","v":0},{"$f":"ROUNDUP(F42*B6/100,0)","v":0}]
[1.125,1.1666666666666701,{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C43/B3,0)","v":2},{"$f":"ROUNDUP($D43*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F43*B5/100,0)","v":0},{"$f":"ROUNDUP(F43*B6/100,0)","v":0}]
[1.1666666666666701,1.2083333333333299,{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C44/B3,0)","v":2},{"$f":"ROUNDUP($D44*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F44*B5/100,0)","v":0},{"$f":"ROUNDUP(F44*B6/100,0)","v":0}]
[1.2083333333333299,1.25,{"$f":"C23","v":1.5},{"$f":"ROUNDUP($C45/B3,0)","v":2},{"$f":"ROUNDUP($D45*B4/100,0)","v":0},2,{"$f":"ROUNDUP(F45*B5/100,0)","v":0},{"$f":"ROUNDUP(F45*B6/100,0)","v":0}]

{"sheet":"Constants","index":2,"n_rows":7,"n_cols":12,"rows_kept":7,"cut":false,"hidden":true,"merged":[]}
["Fixed Schedule","Scaling Policy Type","Scaling Metrics","Comparison Operator","Units","Adjustment Types","Values","Fleet Scaling Options",null,"Schedule","Users","Capacity"]
["Business Hours (9AM - 5PM)","Scale In","Capacity Utilization",">","Percentage","% capacity","Yes","Fleet Auto Scaling",null,"Once","Min Users","Desired Capacity"]
["Extended Hours (7AM - 10PM)","Scale Out","Available Capacity",">=","Instances","instances","No","Fixed Fleet Scaling based on Schedule",null,"Frequency","Max Users","Minimum Instances"]
["Offpeak hours (5PM - 8AM)","Scheduled Scaling","Insufficient Capacity Error","<=",null,"User Sessions",null,null,null,"Cron Expression","Min User sessions for fleet","Maximum Instances"]
["24x7","Target Tracking","Available User Session Capacity","<",null,null,null,null,null,null,"Max User sessions for fleet","Desired UserSession Capacity"]
["24x5",null,null,null,null,null,null,null,null,null,null,"Minimum user sessions for fleet"]
["Other",null,null,null,null,null,null,null,null,null,null,"Maximum user sessions for fleet"]