自动缩放 ProvisionedConcurrentExecutions AWS Lambda DependsOn 值 null

Autoscale ProvisionedConcurrentExecutions AWS Lambda DependsOn value null

我正在尝试将自动缩放添加到 AWS 上 Lambda 的预配置并发配置中。 我在使用 Lambda 目标的 DependsOn: 值时遇到问题,它似乎无法识别传入的资源并说它为空。在 AWS 的示例中,它使用 AutoPublishAlias,这对我来说不是一个选项。 https://aws.amazon.com/blogs/aws/new-provisioned-concurrency-for-lambda-functions/

我引用不正确吗?

  **LambdaAlias:**
    Type: AWS::Lambda::Alias
    Properties:
      Description: Adds provisioned concurrency for lambda using alias on arn
      FunctionName: !Ref Lambda
      FunctionVersion: !GetAtt LambdaVersion.Version
      Name: live
      ProvisionedConcurrencyConfig:
        ProvisionedConcurrentExecutions: !Ref ProvisionedConcurrentExecutions
           
   LambdaTarget:
     Type: AWS::ApplicationAutoScaling::ScalableTarget
     Properties:
       MaxCapacity: 100
       MinCapacity: 1
       ResourceId: !Sub function:${Lambda}:live # You need to specify an alis or version here
       RoleARN: !Ref IamRoleArn
       ScalableDimension: lambda:function:ProvisionedConcurrency
       ServiceNamespace: lambda
     **DependsOn: LambdaAlias** #  This is your function logical ID + "Alias" + what you use for AutoPublishAlias

   LambdaTrackingScalingPolicy:
     Type: AWS::ApplicationAutoScaling::ScalingPolicy
     Properties:
       PolicyName: utilization
       PolicyType: TargetTrackingScaling
       ScalingTargetId: !Ref LambdaTarget
       TargetTrackingScalingPolicyConfiguration:
         TargetValue: 0.70 #  Any value between 0.1 and 0.9 can be used here
         PredefinedMetricSpecification:
           PredefinedMetricType: LambdaProvisionedConcurrencyUtilization

添加资源片段

Resources:
  Lambda:
    Type: AWS::Lambda::Function
    Properties:
      !If
        - EnableVpcConfig
        - FunctionName: !Ref FunctionName
          Description: !Ref FunctionDescription
          Code:
            S3Bucket: !Ref CodeSourceBucket
            S3Key: !Sub 'api-packages/${CodeFile}'
          Handler: !Ref Handler
          Environment:
            Variables:
              APP_ID: !If [ UsesPublicKeyAPI, !Ref AppId, !Ref 

解决方案

答案是引用我创建的 AWS::Lambda::Alias 资源的逻辑 ID,在本例中是 取决于:LambdaAlias

文档使用的是不需要创建资源的 AutoPublishAlias AWS::Lambda::Alias,因此所需的配置略有不同

因为您没有使用任何 AutoPublishAlias 格式

{functionLogicalResourceName}Alias{aliasName}

应该适合你..

在您提供的示例中。您还没有提供部署 Lambda 的部分,所以如果我们假设您的 lambda 逻辑 ID 是 MyLambda,您应该

DependsOn: MyLambdaAliaslive

您是否尝试过只使用 LambdaAlias 的资源名称 我觉得 DependsOn: LambdaAlias 应该可以解决问题

您使用的是纯 Cloudformation,而您引用的文章使用的是 AWS SAM。