mirror of
https://gitea.com/mcereda/oam.git
synced 2026-02-09 05:44:23 +00:00
chore(pulumi/aws): add snippet to autoscale an ecs service
This commit is contained in:
81
snippets/pulumi/aws/autoscale ecs services.ts
Normal file
81
snippets/pulumi/aws/autoscale ecs services.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import * as pulumi from '@pulumi/pulumi';
|
||||
import * as aws from '@pulumi/aws';
|
||||
|
||||
const cluster: pulumi.Output<aws.ecs.GetClusterResult> = aws.ecs.getClusterOutput({ clusterName: 'devel' });
|
||||
const service: pulumi.Output<aws.ecs.GetServiceResult> = aws.ecs.getServiceOutput({
|
||||
clusterArn: cluster.arn,
|
||||
serviceName: 'someService',
|
||||
});
|
||||
const targetGroup = aws.alb.getTargetGroupOutput({
|
||||
arn: service.loadBalancers.apply(albs => albs![0].targetGroupArn!),
|
||||
});
|
||||
const loadBalancer = aws.alb.getLoadBalancerOutput({ arn: targetGroup.loadBalancerArns[0] });
|
||||
|
||||
const autoscalingTarget = new aws.appautoscaling.Target(
|
||||
`${service.serviceName}`,
|
||||
{
|
||||
resourceId: pulumi.interpolate `service/${cluster.clusterName}/${service.name}`,
|
||||
serviceNamespace: 'ecs',
|
||||
scalableDimension: 'ecs:service:DesiredCount',
|
||||
minCapacity: 1,
|
||||
maxCapacity: 3,
|
||||
},
|
||||
);
|
||||
new aws.appautoscaling.Policy(
|
||||
`${service.serviceName}-averageCpuUtilization`,
|
||||
{
|
||||
name: 'Scale on Average CPU Utilization',
|
||||
policyType: "TargetTrackingScaling",
|
||||
|
||||
resourceId: autoscalingTarget.resourceId,
|
||||
serviceNamespace: autoscalingTarget.serviceNamespace,
|
||||
scalableDimension: autoscalingTarget.scalableDimension,
|
||||
targetTrackingScalingPolicyConfiguration: {
|
||||
predefinedMetricSpecification: {
|
||||
predefinedMetricType: "ECSServiceAverageCPUUtilization",
|
||||
},
|
||||
targetValue: 75.0,
|
||||
scaleInCooldown: 60,
|
||||
scaleOutCooldown: 60,
|
||||
},
|
||||
},
|
||||
);
|
||||
new aws.appautoscaling.Policy(
|
||||
`${service.serviceName}-averageMemoryUtilization`,
|
||||
{
|
||||
name: 'Scale on Average Memory Utilization',
|
||||
policyType: "TargetTrackingScaling",
|
||||
|
||||
resourceId: autoscalingTarget.resourceId,
|
||||
serviceNamespace: autoscalingTarget.serviceNamespace,
|
||||
scalableDimension: autoscalingTarget.scalableDimension,
|
||||
targetTrackingScalingPolicyConfiguration: {
|
||||
predefinedMetricSpecification: {
|
||||
predefinedMetricType: "ECSServiceAverageMemoryUtilization",
|
||||
},
|
||||
targetValue: 75.0,
|
||||
scaleInCooldown: 60,
|
||||
scaleOutCooldown: 60,
|
||||
},
|
||||
},
|
||||
);
|
||||
new aws.appautoscaling.Policy(
|
||||
`${service.serviceName}-albRequestCountPerTarget`,
|
||||
{
|
||||
name: 'Scale on ALB Request Count',
|
||||
policyType: "TargetTrackingScaling",
|
||||
|
||||
resourceId: autoscalingTarget.resourceId,
|
||||
serviceNamespace: autoscalingTarget.serviceNamespace,
|
||||
scalableDimension: autoscalingTarget.scalableDimension,
|
||||
targetTrackingScalingPolicyConfiguration: {
|
||||
predefinedMetricSpecification: {
|
||||
predefinedMetricType: "ALBRequestCountPerTarget",
|
||||
resourceLabel: pulumi.interpolate `${loadBalancer.arnSuffix}/${targetGroup.arnSuffix}`,
|
||||
},
|
||||
targetValue: 12.0,
|
||||
scaleInCooldown: 60,
|
||||
scaleOutCooldown: 60,
|
||||
},
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user