Autoscale ProvisionedConcurrentExecutions AWS Lambda DependsOn 值 null

Posted

技术标签:

【中文标题】Autoscale ProvisionedConcurrentExecutions AWS Lambda DependsOn 值 null【英文标题】:Autoscale ProvisionedConcurrentExecutions AWS Lambda DependsOn value null 【发布时间】:2021-08-22 09:07:45 【问题描述】:

我正在尝试将自动扩展添加到 AWS 上的 Lambda 的预置并发配置中。 我在使用 DependsOn: Lambda 目标的值时遇到问题,它似乎无法识别我传入的资源并说它为空。在 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,在本例中为 DependsOn:LambdaAlias

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

【问题讨论】:

您的代码中没有DependsOn 它在 LambdaTarget 下 DependsOn: LambdaAlias 你的代码中真的有像ResourceId: !Sub function:$Lambda:live You need to specify an alis or version here 这样的值吗? 别名是'live' 那么您的代码中的You need to specify an alis or version here 是什么? 【参考方案1】:

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

functionLogicalResourceNameAliasaliasName

应该适合你..

在您提供的示例中。您尚未提供部署 Lambda 的部分,因此如果我们假设您的 lambda 逻辑 ID 是 MyLambda,您应该

DependsOn: MyLambdaAliaslive

【讨论】:

嘿,我尝试了一些依赖项的变体,但仍然无法正确部署,我在模板的资源块中添加了资源 sn-p 模板格式错误:未解决的资源依赖项 [LambdaAliaslive] 【参考方案2】:

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

您使用的是普通 Cloudformation,而您参考的文章使用的是 AWS SAM。

【讨论】:

以上是关于Autoscale ProvisionedConcurrentExecutions AWS Lambda DependsOn 值 null的主要内容,如果未能解决你的问题,请参考以下文章

如何为 AutoScale 实例使用 AWS 负载均衡器代理协议?

如何在散点图中制作 relim() 和 autoscale()

对于 Amazon Web Services 上极短的流量峰值,正确的 Cloudwatch/Autoscale 设置是啥?

AWS - 重建 Autoscale 组中的所有实例

k8s autoscale命令

启用VMSS Autoscale报警功能