我可以在 CloudFormation 中共享 ScalableTarget 或 ScalingPolicy 吗?
Can I share ScalableTarget or ScalingPolicy in CloudFormation?
我的 CloudFormation 模板中定义了多个 AWS lambda。我想为所有这些定义 ProvisionedConcurrency 的缩放比例,比如说至少有 1 个配置的 lambda,最多有 4 个。
然后我有一个 lambda 的缩放配置,如下所示:
HelloWorldScalingTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 4
MinCapacity: 1
ResourceId: !Sub function:${HelloWorld}:live
RoleARN: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/lambda.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_Lambda
ScalableDimension: lambda:function:ProvisionedConcurrency
ServiceNamespace: lambda
HelloWorldScalingPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: utilization
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref HelloWorldScalingTarget
TargetTrackingScalingPolicyConfiguration:
TargetValue: 0.8
PredefinedMetricSpecification:
PredefinedMetricType: LambdaProvisionedConcurrencyUtilization
问题是我需要按名称引用每个 lambda,并且每个 lambda 都有单独的 ScalableTarget
和 ScalingPolicy
。但是 ScalingPolicy
对于所有 lambda 都是相同的。
有什么方法可以删除此重复项并在 lambda(或 ScalableTarget
)之间共享 ScalingPolicy
?
逻辑上没有办法做到这一点。 Lambda 不代表单个实例,它代表一个层,该层能够根据到达您的 lambda 的请求为 运行 您的函数生成多个实例。
由于每个 lambda 可以有不同的属性,比如运行时和内存,每个 lambda 的扩展策略将影响它只创建的实例。这使得在多个 lambda 之间共享扩展策略是不现实的,因为每个 lambda 的利用率值将根据其属性而不同。
我的 CloudFormation 模板中定义了多个 AWS lambda。我想为所有这些定义 ProvisionedConcurrency 的缩放比例,比如说至少有 1 个配置的 lambda,最多有 4 个。
然后我有一个 lambda 的缩放配置,如下所示:
HelloWorldScalingTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 4
MinCapacity: 1
ResourceId: !Sub function:${HelloWorld}:live
RoleARN: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/lambda.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_Lambda
ScalableDimension: lambda:function:ProvisionedConcurrency
ServiceNamespace: lambda
HelloWorldScalingPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: utilization
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref HelloWorldScalingTarget
TargetTrackingScalingPolicyConfiguration:
TargetValue: 0.8
PredefinedMetricSpecification:
PredefinedMetricType: LambdaProvisionedConcurrencyUtilization
问题是我需要按名称引用每个 lambda,并且每个 lambda 都有单独的 ScalableTarget
和 ScalingPolicy
。但是 ScalingPolicy
对于所有 lambda 都是相同的。
有什么方法可以删除此重复项并在 lambda(或 ScalableTarget
)之间共享 ScalingPolicy
?
逻辑上没有办法做到这一点。 Lambda 不代表单个实例,它代表一个层,该层能够根据到达您的 lambda 的请求为 运行 您的函数生成多个实例。
由于每个 lambda 可以有不同的属性,比如运行时和内存,每个 lambda 的扩展策略将影响它只创建的实例。这使得在多个 lambda 之间共享扩展策略是不现实的,因为每个 lambda 的利用率值将根据其属性而不同。