AWS::ApplicationAutoScaling::ScalingPolicy - AWS CloudFormation

AWS::ApplicationAutoScaling::ScalingPolicy

O recurso AWS::ApplicationAutoScaling::ScalingPolicy define uma política de escalabilidade usada pelo Application Auto Scaling para ajustar seus recursos de aplicativos.

Para obter mais informações, consulte PutScalingPolicy na Referência da API do Application Auto Scaling. Para obter mais informações sobre políticas de escalabilidade, consulte o Guia do usuário do Application Auto Scaling.

Para obter exercícios introdutórios para dimensionar recursos específicos, consulte Conceitos básicos no Guia do usuário do aplicativo Auto Scaling.

Sintaxe

Para declarar esta entidade no modelo do AWS CloudFormation, use a seguinte sintaxe:

JSON

{ "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : String, "PolicyType" : String, "ResourceId" : String, "ScalableDimension" : String, "ScalingTargetId" : String, "ServiceNamespace" : String, "StepScalingPolicyConfiguration" : StepScalingPolicyConfiguration, "TargetTrackingScalingPolicyConfiguration" : TargetTrackingScalingPolicyConfiguration } }

Properties

PolicyName

O nome da política de escalabilidade.

Obrigatório: Sim

Type: string

Mínimo: 1

Máximo: 256

Padrão: \p{Print}+

Update requires: Replacement

PolicyType

O tipo de política do Application Auto Scaling.

Há suporte para os seguintes tipos de política:

TargetTrackingScaling — não compatível com o Amazon EMR

StepScaling — não compatível com o DynamoDB, o Comprehend ou o Lambda

Obrigatório: Sim

Type: string

Update requires: No interruption

ResourceId

O identificador de recursos exclusivo para o destino escalável ao qual essa política de escalabilidade se aplica. Para obter os valores válidos, consulte o parâmetro ResourceId para PutScalingPolicy na Referência da API do Application Auto Scaling.

É necessário especificar as propriedades ResourceId, ScalableDimension e ServiceNamespace, ou a propriedade ScalingTargetId, mas não ambas.

Obrigatório: Condicional

Type: string

Update requires: Replacement

ScalableDimension

A dimensão escalável do destino escalável ao qual essa política de escalabilidade se aplica. A dimensão escalável contém o namespace de serviço, o tipo de recurso e a propriedade de escalabilidade, como ecs:service:DesiredCount para a contagem de tarefas desejadas de um serviço do Amazon ECS. Para obter os valores válidos, consulte o parâmetro ScalableDimension para PutScalingPolicy na Referência da API do Application Auto Scaling.

É necessário especificar as propriedades ResourceId, ScalableDimension e ServiceNamespace, ou a propriedade ScalingTargetId, mas não ambas.

Obrigatório: Condicional

Type: string

Update requires: Replacement

ScalingTargetId

O ID de um destino escalável do Application Auto Scaling gerado pelo AWS CloudFormation. Para obter mais informações sobre o ID, consulte a seção de Valor de retorno do recurso AWS::ApplicationAutoScaling::ScalableTarget.

É necessário especificar a propriedade ScalingTargetId ou as propriedades ResourceId, ScalableDimension e ServiceNamespace, mas não ambas.

Obrigatório: Condicional

Type: string

Update requires: Replacement

ServiceNamespace

O namespace do serviço da AWS que fornece o recurso ou custom-resource de um recurso fornecido por seu próprio aplicativo ou serviço. Para obter os valores válidos, consulte o parâmetro ServiceNamespace para PutScalingPolicy na Referência da API do Application Auto Scaling.

É necessário especificar as propriedades ResourceId, ScalableDimension e ServiceNamespace, ou a propriedade ScalingTargetId, mas não ambas.

Obrigatório: Condicional

Type: string

Update requires: Replacement

StepScalingPolicyConfiguration

Uma política de escalabilidade em etapas.

Obrigatório: Não

Type: StepScalingPolicyConfiguration

Update requires: No interruption

TargetTrackingScalingPolicyConfiguration

Uma política de escalabilidade de rastreamento de destino.

Obrigatório: Não

Type: TargetTrackingScalingPolicyConfiguration

Update requires: No interruption

Valores de retorno

Ref.

Quando o ID lógico desse recurso for fornecido à função intrínseca Ref, Ref retornará o nome de recurso da Amazon (ARN) da política de escalabilidade do Application Auto Scaling. Por exemplo: arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:12ab3c4d-56789-0ef1-2345-6ghi7jk8lm90:resource/ecs/service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH:policyName/MyStepPolicy.

Para obter mais informações sobre como usar a função Ref, consulte Ref.

Exemplos

Os exemplos a seguir criam políticas de escalabilidade para um destino escalável que está registrado no Application Auto Scaling. Para obter mais informações, consulte PutScalingPolicy na Referência da API do Application Auto Scaling.

Política de escalabilidade de rastreamento de destino com uma especificação de métrica predefinida para uma tabela do Amazon DynamoDB

Este exemplo registra uma tabela do DynamoDB (AWS::DynamoDB::Table) como um destino escalável e cria uma política de escalabilidade com o tipo de política TargetTrackingScaling. A política de escalabilidade escala a taxa de transferência da capacidade de gravação da tabela para manter a utilização de destino em 50% com base na métrica de utilização da capacidade de gravação.

JSON

{ "Resources":{ "WriteCapacityScalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":15, "MinCapacity":5, "RoleARN":{ "Fn::Sub":"arn:aws:iam::${AWS::AccountId}:role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable" }, "ServiceNamespace":"dynamodb", "ScalableDimension":"dynamodb:table:WriteCapacityUnits", "ResourceId":{ "Fn::Join":[ "/", [ "table", { "Ref":"DDBTable" } ] ] } } }, "WriteScalingPolicy":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":"WriteAutoScalingPolicy", "PolicyType":"TargetTrackingScaling", "ScalingTargetId":{ "Ref":"WriteCapacityScalableTarget" }, "TargetTrackingScalingPolicyConfiguration":{ "TargetValue":50.0, "ScaleInCooldown":60, "ScaleOutCooldown":60, "PredefinedMetricSpecification":{ "PredefinedMetricType":"DynamoDBWriteCapacityUtilization" } } } } } }

YAML

--- Resources: WriteCapacityScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 15 MinCapacity: 5 RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable' ServiceNamespace: dynamodb ScalableDimension: dynamodb:table:WriteCapacityUnits ResourceId: !Join - / - - table - !Ref DDBTable WriteScalingPolicy: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: WriteAutoScalingPolicy PolicyType: TargetTrackingScaling ScalingTargetId: !Ref WriteCapacityScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 50.0 ScaleInCooldown: 60 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: DynamoDBWriteCapacityUtilization

Políticas de escalabilidade de rastreamento de destino para um serviço do ECS

O exemplo a seguir registra um serviço do ECS (AWS::ECS::Service) como um destino escalável e cria duas políticas de escalabilidade com o tipo de política TargetTrackingScaling. As políticas são usadas para escalar o serviço do ECS com base no uso médio de CPU e memória do serviço.

JSON

{ "Resources":{ "ECSScalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":"2", "MinCapacity":"1", "RoleARN":{ "Fn::Sub":"arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService" }, "ServiceNamespace":"ecs", "ScalableDimension":"ecs:service:DesiredCount", "ResourceId":{ "Fn::Join":[ "/", [ "service", { "Ref":"cluster" }, { "Fn::GetAtt":[ "service", "Name" ] } ] ] } } }, "ServiceScalingPolicyCPU":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":{"Fn::Sub":"${AWS::StackName}-target-tracking-cpu70"}, "PolicyType":"TargetTrackingScaling", "ScalingTargetId":{ "Ref":"ECSScalableTarget" }, "TargetTrackingScalingPolicyConfiguration":{ "TargetValue":70.0, "ScaleInCooldown":180, "ScaleOutCooldown":60, "PredefinedMetricSpecification":{ "PredefinedMetricType":"ECSServiceAverageCPUUtilization" } } } }, "ServiceScalingPolicyMem":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":{"Fn::Sub":"${AWS::StackName}-target-tracking-mem90"}, "PolicyType":"TargetTrackingScaling", "ScalingTargetId":{ "Ref":"ECSScalableTarget" }, "TargetTrackingScalingPolicyConfiguration":{ "TargetValue":90.0, "ScaleInCooldown":180, "ScaleOutCooldown":60, "PredefinedMetricSpecification":{ "PredefinedMetricType":"ECSServiceAverageMemoryUtilization" } } } } } }

YAML

--- Resources: ECSScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: '2' MinCapacity: '1' RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService' ServiceNamespace: ecs ScalableDimension: 'ecs:service:DesiredCount' ResourceId: !Join - / - - service - !Ref cluster - !GetAtt service.Name ServiceScalingPolicyCPU: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: !Sub ${AWS::StackName}-target-tracking-cpu70 PolicyType: TargetTrackingScaling ScalingTargetId: Ref: ECSScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 70.0 ScaleInCooldown: 180 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageCPUUtilization ServiceScalingPolicyMem: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: !Sub ${AWS::StackName}-target-tracking-mem90 PolicyType: TargetTrackingScaling ScalingTargetId: Ref: ECSScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 90.0 ScaleInCooldown: 180 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageMemoryUtilization

Política de escalabilidade de rastreamento de destino para expansão somente para um serviço do ECS

O exemplo a seguir aplica uma política de escalabilidade de rastreamento de destino com o tipo de métrica ALBRequestCountPerTarget a um serviço do ECS chamado web-app no cluster padrão. A política é usada para adicionar capacidade ao serviço do ECS quando a contagem de solicitações por destino excede o valor de destino. Como o valor de DisableScaleIn é definido como true (verdadeiro), a política de rastreamento de destino não remove a capacidade do destino escalável.

JSON

{ "Resources":{ "ServiceScalingPolicyALB":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":"alb-scale-out-target-tracking-scaling-policy", "PolicyType":"TargetTrackingScaling", "ServiceNamespace":"ecs", "ScalableDimension":"ecs:service:DesiredCount", "ResourceId":"service/default/web-app", "TargetTrackingScalingPolicyConfiguration":{ "TargetValue":1000.0, "ScaleInCooldown":60, "ScaleOutCooldown":60, "DisableScaleIn":true, "PredefinedMetricSpecification":{ "PredefinedMetricType":"ALBRequestCountPerTarget", "ResourceLabel": "app/EC2Co-EcsEl-1TKLTMITMM0EO/f37c06a68c1748aa/targetgroup/EC2Co-Defau-LDNM7Q3ZH1ZN/6d4ea56ca2d6a18d" } } } } } }

YAML

--- Resources: ServiceScalingPolicyALB: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: alb-scale-out-target-tracking-scaling-policy PolicyType: TargetTrackingScaling ServiceNamespace: ecs ScalableDimension: ecs:service:DesiredCount ResourceId: service/default/web-app TargetTrackingScalingPolicyConfiguration: TargetValue: 1000.0 ScaleInCooldown: 60 ScaleOutCooldown: 60 DisableScaleIn: true PredefinedMetricSpecification: PredefinedMetricType: ALBRequestCountPerTarget ResourceLabel: app/EC2Co-EcsEl-1TKLTMITMM0EO/f37c06a68c1748aa/targetgroup/EC2Co-Defau-LDNM7Q3ZH1ZN/6d4ea56ca2d6a18d

Política de escalabilidade para aumentar a escala somente para uma frota spot

O exemplo a seguir registra uma frota spot (AWS::EC2::SpotFleet) como um destino escalável, cria uma ação programada e cria uma política de escalabilidade. Ele usa as funções intrínsecas Fn::Join e Ref para criar a propriedade ResourceId.

Ele cria uma política de escalabilidade com o tipo de política StepScaling e o tipo de ajuste ChangeInCapacity. Quando um alarme associado é acionado, a política aumenta a capacidade do destino escalável com base nos seguintes ajustes em etapas (pressupondo-se um limite de alarme do CloudWatch de 70%):

  • Aumentar a capacidade em 1 quando o valor da métrica for maior ou igual a 70%, mas menor que 85%

  • Aumentar a capacidade em 2 quando o valor da métrica for maior ou igual a 85%, mas menor que 95%

  • Aumentar a capacidade em 3 quando o valor da métrica for maior ou igual a 95%

JSON

{ "Resources":{ "SpotFleetScalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":2, "MinCapacity":1, "RoleARN":{ "Fn::Sub":"arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ec2.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest" }, "ServiceNamespace":"ec2", "ScalableDimension":"ec2:spot-fleet-request:TargetCapacity", "ResourceId":{ "Fn::Join":[ "/", [ "spot-fleet-request", { "Ref":"ECSSpotFleet" } ] ] }, "ScheduledActions":[ { "EndTime":"2019-12-31T12:00:00.000Z", "ScalableTargetAction":{ "MaxCapacity":"20", "MinCapacity":"5" }, "ScheduledActionName":"First", "StartTime":"2019-12-25T12:00:00.000Z", "Schedule":"cron(0 18 * * ? *)" } ] } }, "SpotFleetPolicyHigh":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":"SpotFleetPolicyHigh", "PolicyType":"StepScaling", "ScalingTargetId":{ "Ref":"SpotFleetScalableTarget" }, "StepScalingPolicyConfiguration":{ "AdjustmentType":"ChangeInCapacity", "Cooldown":600, "MetricAggregationType":"Average", "StepAdjustments":[ { "MetricIntervalLowerBound":0, "MetricIntervalUpperBound":15, "ScalingAdjustment":1 }, { "MetricIntervalLowerBound":15, "MetricIntervalUpperBound":25, "ScalingAdjustment":2 }, { "MetricIntervalLowerBound":25, "ScalingAdjustment":3 } ] } } } } }

YAML

--- Resources: SpotFleetScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 2 MinCapacity: 1 RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ec2.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest' ServiceNamespace: ec2 ScalableDimension: 'ec2:spot-fleet-request:TargetCapacity' ResourceId: !Join - / - - spot-fleet-request - !Ref ECSSpotFleet ScheduledActions: - EndTime: '2019-12-31T12:00:00.000Z' ScalableTargetAction: MaxCapacity: '20' MinCapacity: '5' ScheduledActionName: First StartTime: '2019-12-25T12:00:00.000Z' Schedule: 'cron(0 18 * * ? *)' SpotFleetPolicyHigh: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: SpotFleetPolicyHigh PolicyType: StepScaling ScalingTargetId: Ref: SpotFleetScalableTarget StepScalingPolicyConfiguration: AdjustmentType: ChangeInCapacity Cooldown: 600 MetricAggregationType: Average StepAdjustments: - MetricIntervalLowerBound: 0 MetricIntervalUpperBound: 15 ScalingAdjustment: 1 - MetricIntervalLowerBound: 15 MetricIntervalUpperBound: 25 ScalingAdjustment: 2 - MetricIntervalLowerBound: 25 ScalingAdjustment: 3

Consulte também