【发布时间】:2021-07-09 07:56:55
【问题描述】:
基于 CloudFormation 模板中的参数,我尝试为资源提供属性。而且我的意思不是为该属性提供一个值,而是决定该属性是否应该传递给资源。 具体来说,我尝试对 AWS::IAM::Role 资源的属性 RoleName 执行此操作。我尝试了以下方法:
"Conditions": {
"MyCondition": {
"Fn::Equals": [
{
"Ref": "OptionalRoleName"
},
""
]
}
},
...
"Parameters": {
"OptionalRoleName": {
"AllowedPattern": "^$|[\\w+=,.@-]+",
"ConstraintDescription": "Please use only upper and lowercase alphanumeric characters with no spaces and any of the following characters: _+=,.@-.",
"Default": "",
"Description": "Optional fixed Role Name",
"Type": "String"
}
},
...
"Properties": {
"RoleName": {
"Fn::If": [
"MyCondition",
{"Ref": "OptionalRoleName"},
{"Ref": "AWS::NoValue"}
]
},
....
但是如果条件不满足,AWS 在执行过程中会抱怨 RoleName 不能为空字符串。因此,如果是字符串属性,AWS::NoValue 似乎评估为空字符串。 有没有办法解决这个问题?
谢谢!
【问题讨论】:
-
请您也发布
MyCondition的定义方式吗? -
谢谢!我假设
OptionalRoleName和MyRoleName应该是相同的参数名称 - 对吗? -
你是对的 - 我更新了问题(再次;-))
标签: amazon-web-services amazon-cloudformation