微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS CloudFormation:有条件地提供属性本身不是值!

如何解决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 举报,一经查实,本站将立刻删除。