如何解决AWS CloudFormation:有条件地提供属性本身不是值!
基于 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 似乎在字符串属性的情况下评估为空字符串。 如果有办法解决这个问题?
谢谢!
解决方法
您的条件不正确;如果未指定 true
,则条件评估为 OptionalRoleName
,但是您希望否定它。将条件指定如下应该会给你你想要的行为:
"MyCondition": {
"Fn::Not": {
"Fn::Equals": [
{
"Ref": "OptionalRoleName"
},""
]
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。