我可以在 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 都有单独的 ScalableTargetScalingPolicy。但是 ScalingPolicy 对于所有 lambda 都是相同的。

有什么方法可以删除此重复项并在 lambda(或 ScalableTarget)之间共享 ScalingPolicy

逻辑上没有办法做到这一点。 Lambda 不代表单个实例,它代表一个层,该层能够根据到达您的 lambda 的请求为 运行 您的函数生成多个实例。

由于每个 lambda 可以有不同的属性,比如运行时和内存,每个 lambda 的扩展策略将影响它只创建的实例。这使得在多个 lambda 之间共享扩展策略是不现实的,因为每个 lambda 的利用率值将根据其属性而不同。