我正在尝试执行以下操作:
"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”下拉列表保留为空,但这不适用于云形式验证,因为它需要AWS类型的值。我不能只使用字符串类型,因为我希望用户从AWS提供的SubnetId中进行选择。
如何解决这个问题?
感谢您的帮助。
答案 0 :(得分:1)
不幸的是,如果您希望参数是可选的,则不能使用任何特定于AWS的参数类型(即http.Request.FormFile()
)。您希望的解决方案也不会起作用。我建议将AWS::*
类型String
设置为类似AllowedPattern
的类型,但这不符合您使用现有子网值预先填充下拉列表的要求。
答案 1 :(得分:0)
我不认为你的问题有一个很好的解决方案。您可以尝试的一件事是使用AWS::NoValue作为默认默认值,但我怀疑它是否有效。
答案 2 :(得分:0)
我一直在寻找这种类型的条件参数,据我所知,它不存在。您最接近的是AWS Condition。
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模板,这会有点短暂,因为默认子网不存在。