无法从云形成 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 中的条件函数返回整数的主要内容,如果未能解决你的问题,请参考以下文章