【问题标题】:AWS Cloudformation parameter dependencyAWS Cloudformation 参数依赖项
【发布时间】:2017-03-04 05:01:10
【问题描述】:

我正在尝试执行以下操作:

"Parameters": {
    "InterfaceMode" : {
        "Description": "Configure instance to run in onearm or inline mode",
        "Type": "String",
        "Default": "onearm",
        "AllowedValues": [ "onearm", "inline" ], 
    }
    "InlineSubnetId" : {
        "Description": "Name of a subnet assigned to the VPC to use for second interface in inline mode.", 
        "Type": "AWS::EC2::Subnet::Id",
        "Default": "None"
    },

现在如果用户选择onearm,只需要一个接口,不需要InlineSubnetId。通常用户会将“InlineSubnetId”下拉列表留空,但这不适用于 cloudformation 验证,因为它需要 AWS 类型的值。我不能只使用字符串类型,因为我希望用户从 AWS 提供的 SubnetIds 中进行选择。

如何解决这个问题?

  1. 有没有办法绕过验证,允许选择的 AWS 类型为空?
  2. 有什么方法可以在 Subnet::Id 列表中添加另一个选项,例如“None”?
  3. 有没有办法仅在模式为内联时隐藏 inlineSubnetId 参数?
  4. 第二页参数如何,取决于第一页参数的输出?

感谢您的帮助。

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    我也一直在寻找这种类型的条件参数,据我所知它不存在。最接近的是 AWS 条件。

    http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-conditions.html

    这将允许您根据输入参数定义评估为 true 或 false 的条件,然后您可以使用这些参数与 Fn:If 语句一起将不同的值注入资源。

    因此,对于上述情况,您可能希望将该值默认为已知的子网 ID,但如果不需要,请使用条件忽略此值。不幸的是,如果您尝试在不同的 VPC 中使用相同的 CloudFormation 模板,这会有点短,因为默认子网不存在。

    【讨论】:

      【解决方案2】:

      不幸的是,如果您希望参数是可选的,则不能使用任何特定于 AWS 的参数类型(即AWS::*)。您所希望的解决方法也无济于事。我建议使用 String 类型并将 AllowedPattern 设置为 ^(subnet-[0-9a-fA-F]{8})?$ 之类的东西,但这不符合您使用现有子网值预先填充下拉列表的要求。

      【讨论】:

        【解决方案3】:

        我认为您的问题没有很好的解决方案。您可以尝试的一件事是使用 AWS::NoValue 作为默认默认值,但我怀疑它会起作用。

        【讨论】:

          猜你喜欢
          • 2021-12-29
          • 1970-01-01
          • 1970-01-01
          • 2020-03-07
          • 2021-04-16
          • 2016-10-02
          • 2018-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多