无法从云形成 yaml 中的条件函数返回整数

Posted

技术标签:

【中文标题】无法从云形成 yaml 中的条件函数返回整数【英文标题】:Can't return integer from Conditional function in cloud formation yaml 【发布时间】:2019-05-26 12:14:22 【问题描述】:

我正在为 lambda 函数编写 cloudformation 无服务器 yaml。如果 IsProduction 为真,我需要一个条件参数reservedConcurrency 为 100,如果为假,则为 20。但是当我部署 yaml 文件时发生错误: You should use integer as reservedConcurrency value on function

resources:
  Conditions:
    IsProduction:
      Fn::Equals:
        - $self:provider.stage
        - production

functions:  
  somefunction:
    handler: functions/somefunction
    timeout: 300
    events:
      - sqs:
          arn:
            Fn::GetAtt: [ somequeue, Arn ]
          batchSize: 10
    reservedConcurrency:
      Fn::If:
        - IsProduction
        - 100
        - 20

【问题讨论】:

我知道这有点愚蠢,但你试过 Fn::If: [IsProduction, 100, 20] 吗? @congbaoguier 是的,试过了。同样的错误。 请提供您的 AWS Lambda 函数的完整且正确的定义(例如,您的密钥当前错误)。此外,添加 IsProduction 条件的定义将有助于提供完整的示例。 @Dunedan 添加IsProduction 以供参考。该部分已经过测试,可以在其他配置下工作,所以不用担心。你觉得哪个键错了? 例如你的键的大写/小写是错误的。我建议您使用github.com/awslabs/cfn-python-lint 之类的工具来验证您的模板是否有效。 【参考方案1】:

您不能在 functions 文件内的 functions 块中使用 Cloudformation 内部函数。

尝试使用nested variables

custom:
  concurrency:
    prod: 100

functions:  
  somefunction:
    handler: functions/somefunction
    timeout: 300
    events:
      - sqs:
          arn:
            Fn::GetAtt: [ somequeue, Arn ]
          batchSize: 10
    reservedConcurrency: $self:custom.concurrency.$self:provider.stage, 20

【讨论】:

以上是关于无法从云形成 yaml 中的条件函数返回整数的主要内容,如果未能解决你的问题,请参考以下文章

Jasper 报告逻辑条件未从 Netbeans 执行:“未找到函数”错误

and和or形成的条件选择

二分查找边界条件一些思考

Excel中的条件汇总函数,看过这些你就懂

python测试开发(02-闭包函数+装饰器)

PHP中的条件函数返回运费