【问题标题】:How can I use `If` condition in `Resources` of `serverless.yml`?如何在`serverless.yml`的`Resources`中使用`If`条件?
【发布时间】:2021-08-01 09:25:29
【问题描述】:

我试图在resources 部分中使用!If 条件但失败了。我想控制是否在我的 lambda 上设置 provisionedConcurrency。 lambda 在function 部分下定义。


functions:
  getTransactionsHandler:
    ...

resources:
  Conditions:
    CommonPCNotZero: !Not [!Equals [0, '${self:custom.commonPC}']]
  Resources:
    !If 
      - CommonPCNotZero
      - getTransactionsHandler:
        Type: AWS::Lambda::Alias
          Properties:
            FunctionName: !Ref GetTransactionsHandlerLambdaFunction
            FunctionVersion: !Join ['', [!Ref GetTransactionsHandlerLambdaFunction, ':$LATEST']]
            ProvisionedConcurrencyConfig:
              ProvisionedConcurrentExecutions: '${self:custom.commonPC}'
      - !Ref AWS::NoValue

运行sls deploy时出现以下错误:

Error: The CloudFormation template is invalid: Template format error: [/Resources/Fn::If] resource definition is malformed

!if 条件的正确使用方法是什么?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation serverless-framework


    【解决方案1】:

    您不能使用 If 使整个资源成为有条件的。通常,应使用Condition 完成以下操作:

    resources:
      Conditions:
        CommonPCNotZero: !Not [!Equals [0, '${self:custom.commonPC}']]
      Resources:
         
         MyLambdaAlias: 
            Type: AWS::Lambda::Alias
            Condition: CommonPCNotZero
            Properties:
                FunctionName: !Ref GetTransactionsHandlerLambdaFunction
                FunctionVersion: !Join ['', [!Ref GetTransactionsHandlerLambdaFunction, ':$LATEST']]
                ProvisionedConcurrencyConfig:
                  ProvisionedConcurrentExecutions: '${self:custom.commonPC}'
    
    

    【讨论】:

      【解决方案2】:

      对于资源,您只需添加 Condition 即可包含或排除它。

      functions:
        getTransactionsHandler:
          ...
      
      resources:
        Conditions:
          CommonPCNotZero: !Not [!Equals [0, '${self:custom.commonPC}']]
        Resources:
          getTransactionsHandler:
            Type: AWS::Lambda::Alias
            Condition: CommonPCNotZero
            Properties:
              FunctionName: !Ref GetTransactionsHandlerLambdaFunction
              FunctionVersion: !Join ['', [!Ref GetTransactionsHandlerLambdaFunction, ':$LATEST']]
              ProvisionedConcurrencyConfig:
                ProvisionedConcurrentExecutions: '${self:custom.commonPC}'
      

      另外,注意你的缩进。 TypeProperties 应该在同一级别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-08
        • 2015-04-26
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        • 2020-10-02
        相关资源
        最近更新 更多