package core.aws.task.as;
import com.amazonaws.services.autoscaling.model.PutScalingPolicyRequest;
import com.amazonaws.services.cloudwatch.model.Dimension;
import com.amazonaws.services.cloudwatch.model.PutMetricAlarmRequest;
import com.amazonaws.services.cloudwatch.model.Statistic;
import core.aws.client.AWS;
import core.aws.env.Context;
import core.aws.resource.as.AutoScalingPolicy;
import core.aws.workflow.Action;
import core.aws.workflow.Task;
/**
* @author neo
*/
@Action("create-policy")
public class CreatePolicyTask extends Task<AutoScalingPolicy> {
public CreatePolicyTask(AutoScalingPolicy policy) {
super(policy);
}
@Override
public void execute(Context context) throws Exception {
String asGroupName = resource.asGroup.remoteASGroup.getAutoScalingGroupName();
String policyARN = AWS.as.createPolicy(new PutScalingPolicyRequest()
.withPolicyName(resource.id)
.withAutoScalingGroupName(asGroupName)
.withScalingAdjustment(resource.adjustmentPercentage)
.withAdjustmentType("PercentChangeInCapacity")
.withMinAdjustmentStep(1)
.withCooldown(300));
AWS.cloudWatch.createAlarm(new PutMetricAlarmRequest()
.withAlarmName(context.env.name + ":" + resource.id + "-alarm")
.withMetricName("CPUUtilization")
.withComparisonOperator(resource.comparisonOperator)
.withThreshold(resource.cpuUtilizationPercentage)
.withPeriod(60)
.withEvaluationPeriods(resource.lastMinutes)
.withStatistic(Statistic.Average)
.withNamespace("AWS/EC2")
.withDimensions(new Dimension().withName("AutoScalingGroupName").withValue(asGroupName))
.withAlarmActions(policyARN));
}
}