【问题标题】:AWS CloudFormation: Provide an attribute itself (not the value!) conditionallyAWS CloudFormation:有条件地提供属性本身(不是值!)
【发布时间】: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 的定义方式吗?
  • 谢谢!我假设 OptionalRoleNameMyRoleName 应该是相同的参数名称 - 对吗?
  • 你是对的 - 我更新了问题(再次;-))

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

您的条件不正确;如果未指定OptionalRoleName,则条件评估为true,但是您想要否定它。如下指定条件应该会给你你想要的行为:

"MyCondition": {
    "Fn::Not": {
        "Fn::Equals": [
          {
            "Ref": "OptionalRoleName"
          },
          ""
        ]
    }
  }

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 2019-05-07
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2022-06-28
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多