AWS::ApplicationAutoScaling::ScalableTarget是用来自动扩展AWS资源的服务。对于Lambda ProvisionedConcurrency的工作不如预期,可能是配置有误或者缺少必要的配置。以下是一个解决方法的示例代码:
首先,确保已经创建了Lambda函数,并配置了ProvisionedConcurrency。然后,创建一个ScalableTarget并将其与Lambda函数关联起来,在创建ScalableTarget时,需要提供Lambda函数的ARN以及其他必要的配置。
Resources:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
# Lambda函数的配置
MyScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 10
MinCapacity: 1
ResourceId: !Sub function:${MyLambdaFunction.Arn}
RoleARN: !GetAtt MyScalableTargetRole.Arn
ScalableDimension: "lambda:function:ProvisionedConcurrency"
ServiceNamespace: "lambda"
MyScalableTargetRole:
Type: AWS::IAM::Role
Properties:
# ScalableTarget所需的IAM角色配置
MyScalingPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: MyScalingPolicy
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref MyScalableTarget
TargetTrackingScalingPolicyConfiguration:
TargetValue: 0.5
ScaleInCooldown: 60
ScaleOutCooldown: 60
PredefinedMetricSpecification:
PredefinedMetricType: LambdaProvisionedConcurrencyUtilization
MyAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmName: MyAlarm
AlarmDescription: "Alarm for MyScalingPolicy"
AlarmActions:
- !Ref MyScalingPolicy
ComparisonOperator: GreaterThanOrEqualToThreshold
EvaluationPeriods: 1
MetricName: LambdaProvisionedConcurrencyUtilization
Namespace: AWS/Lambda
Period: 60
Statistic: Average
Threshold: 80
TreatMissingData: breaching
Dimensions:
- Name: FunctionName
Value: !GetAtt MyLambdaFunction.FunctionName
上述代码中,创建了一个ScalableTarget和ScalingPolicy,以及一个CloudWatch Alarm用于监控Lambda函数的ProvisionedConcurrency利用率。根据具体的需求,可以调整MaxCapacity、MinCapacity、TargetValue和Threshold等参数。
通过以上代码示例,可以解决AWS::ApplicationAutoScaling::ScalableTarget对于Lambda ProvisionedConcurrency的工作不如预期的问题。