From 362c7b6369baf24328b7c640f0c7e2239ea2bad1 Mon Sep 17 00:00:00 2001 From: Michael Sambol Date: Sat, 10 Feb 2024 17:10:24 -0800 Subject: [PATCH 1/3] feat(applicationautoscaling): add sagemaker variant scaling policy --- .../aws-applicationautoscaling/README.md | 17 ++++++++++++++++ .../lib/target-tracking-scaling-policy.ts | 5 +++++ .../test/target-tracking.test.ts | 20 +++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/packages/aws-cdk-lib/aws-applicationautoscaling/README.md b/packages/aws-cdk-lib/aws-applicationautoscaling/README.md index 6bc05ee9882f2..760d8f8029c3c 100644 --- a/packages/aws-cdk-lib/aws-applicationautoscaling/README.md +++ b/packages/aws-cdk-lib/aws-applicationautoscaling/README.md @@ -244,3 +244,20 @@ shardsScalableTarget.scaleToTrackMetric('ElastiCacheRedisShardsCPUUtilization', predefinedMetric: appscaling.PredefinedMetric.ELASTICACHE_PRIMARY_ENGINE_CPU_UTILIZATION, }); ``` + +### SageMaker variant provisioned concurrency utilization with target value + +```ts +const target = new appscaling.ScalableTarget(this, 'SageMakerVariantScalableTarget', { + serviceNamespace: appscaling.ServiceNamespace.SAGEMAKER, + scalableDimension: 'sagemaker:variant:DesiredProvisionedConcurrency', + minCapacity: 2, + maxCapacity: 10, + resourceId: 'endpoint/MyEndpoint/variant/MyVariant', +}); + +shardsScalableTarget.scaleToTrackMetric('SageMakerVariantProvisionedConcurrencyUtilization', { + targetValue: 0.9, + predefinedMetric: appscaling.PredefinedMetric.SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION, +}); +``` diff --git a/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts b/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts index 097a0d5df6bff..0f52798412817 100644 --- a/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts +++ b/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts @@ -289,4 +289,9 @@ export enum PredefinedMetric { * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html */ ELASTICACHE_DATABASE_MEMORY_USAGE_COUNTED_FOR_EVICT_PERCENTAGE = 'ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage', + /** + * SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION + * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html + */ + SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION = 'SageMakerVariantProvisionedConcurrencyUtilization', } diff --git a/packages/aws-cdk-lib/aws-applicationautoscaling/test/target-tracking.test.ts b/packages/aws-cdk-lib/aws-applicationautoscaling/test/target-tracking.test.ts index ca117a8406a2f..df3c2c098d841 100644 --- a/packages/aws-cdk-lib/aws-applicationautoscaling/test/target-tracking.test.ts +++ b/packages/aws-cdk-lib/aws-applicationautoscaling/test/target-tracking.test.ts @@ -71,6 +71,26 @@ describe('target tracking', () => { }); }); + test('test setup target tracking on predefined metric for SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION', () => { + // GIVEN + const stack = new cdk.Stack(); + const target = createScalableTarget(stack); + + // WHEN + target.scaleToTrackMetric('Tracking', { + predefinedMetric: appscaling.PredefinedMetric.SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION, + targetValue: 0.5, + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::ApplicationAutoScaling::ScalingPolicy', { + TargetTrackingScalingPolicyConfiguration: { + PredefinedMetricSpecification: { PredefinedMetricType: 'SageMakerVariantProvisionedConcurrencyUtilization' }, + TargetValue: 0.5, + }, + }); + }); + test('test setup target tracking on custom metric', () => { // GIVEN const stack = new cdk.Stack(); From 01480fcf4101019ef9745faa27440d6a16926dd4 Mon Sep 17 00:00:00 2001 From: Michael Sambol Date: Sun, 11 Feb 2024 10:23:01 -0800 Subject: [PATCH 2/3] fix readme --- packages/aws-cdk-lib/aws-applicationautoscaling/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/aws-cdk-lib/aws-applicationautoscaling/README.md b/packages/aws-cdk-lib/aws-applicationautoscaling/README.md index 760d8f8029c3c..79b5e49a8beec 100644 --- a/packages/aws-cdk-lib/aws-applicationautoscaling/README.md +++ b/packages/aws-cdk-lib/aws-applicationautoscaling/README.md @@ -256,7 +256,7 @@ const target = new appscaling.ScalableTarget(this, 'SageMakerVariantScalableTarg resourceId: 'endpoint/MyEndpoint/variant/MyVariant', }); -shardsScalableTarget.scaleToTrackMetric('SageMakerVariantProvisionedConcurrencyUtilization', { +target.scaleToTrackMetric('SageMakerVariantProvisionedConcurrencyUtilization', { targetValue: 0.9, predefinedMetric: appscaling.PredefinedMetric.SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION, }); From f400bf3dfb992a09cffd5918187697a7ce755dbd Mon Sep 17 00:00:00 2001 From: Michael Sambol Date: Sun, 11 Feb 2024 10:29:08 -0800 Subject: [PATCH 3/3] add others missing --- .../lib/target-tracking-scaling-policy.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts b/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts index 0f52798412817..7277fc164e1ea 100644 --- a/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts +++ b/packages/aws-cdk-lib/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts @@ -254,6 +254,16 @@ export enum PredefinedMetric { * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html */ SAGEMAKER_VARIANT_INVOCATIONS_PER_INSTANCE = 'SageMakerVariantInvocationsPerInstance', + /** + * SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION + * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html + */ + SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION = 'SageMakerVariantProvisionedConcurrencyUtilization', + /** + * SAGEMAKER_INFERENCE_COMPONENT_INVOCATIONS_PER_COPY + * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html + */ + SAGEMAKER_INFERENCE_COMPONENT_INVOCATIONS_PER_COPY = 'SageMakerInferenceComponentInvocationsPerCopy', /** * ECS_SERVICE_AVERAGE_CPU_UTILIZATION * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html @@ -275,23 +285,23 @@ export enum PredefinedMetric { */ KAFKA_BROKER_STORAGE_UTILIZATION = 'KafkaBrokerStorageUtilization', /** - * ELASTIC_CACHE_PRIMARY_ENGINE_CPU_UTILIZATION + * ELASTICACHE_PRIMARY_ENGINE_CPU_UTILIZATION * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html */ ELASTICACHE_PRIMARY_ENGINE_CPU_UTILIZATION = 'ElastiCachePrimaryEngineCPUUtilization', /** - * ELASTIC_CACHE_REPLICA_ENGINE_CPU_UTILIZATION + * ELASTICACHE_REPLICA_ENGINE_CPU_UTILIZATION * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html */ ELASTICACHE_REPLICA_ENGINE_CPU_UTILIZATION = 'ElastiCacheReplicaEngineCPUUtilization', /** - * ELASTIC_CACHE_REPLICA_ENGINE_CPU_UTILIZATION + * ELASTICACHE_DATABASE_MEMORY_USAGE_COUNTED_FOR_EVICT_PERCENTAGE * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html */ ELASTICACHE_DATABASE_MEMORY_USAGE_COUNTED_FOR_EVICT_PERCENTAGE = 'ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage', /** - * SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION + * ELASTICACHE_DATABASE_CAPACITY_USAGE_COUNTED_FOR_EVICT_PERCENTAGE * @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html */ - SAGEMAKER_VARIANT_PROVISIONED_CONCURRENCY_UTILIZATION = 'SageMakerVariantProvisionedConcurrencyUtilization', + ELASTICACHE_DATABASE_CAPACITY_USAGE_COUNTED_FOR_EVICT_PERCENTAGE = 'ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage', }