CloudFormation类型参数可以为空

时间:2017-09-17 02:43:53

标签: amazon-web-services amazon-cloudformation

我正在尝试创建一个CloudFormation模板,该模板接受可选的SSH密钥对作为参数。我想使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <div class="clock" data-time="h"> <button class="clock_plus">+</button> <span class="clock_sep">:</span> <span class="clock_h">00</span> <button class="clock_minus">-</button> </div> <div class="clock" data-time="m"> <button class="clock_plus">+</button> <span class="clock_sep">:</span> <span class="clock_m">00</span> <button class="clock_minus">-</button> </div> <div class="clock" data-time="s"> <button class="clock_plus">+</button> <span class="clock_s">00</span> <button class="clock_minus">-</button> </div>类型,因此CloudFormation界面为用户提供了可用键的列表,如图所示。

enter image description here

我遇到的问题是可选部分。如果用户将选择留空,则使用默认值但不认为有效。我明白了:

AWS::EC2::KeyPair::KeyName

有没有办法定义一个可以留空但是具有非泛型类型的参数?

以下是显示问题的示例模板:

Parameter validation failed: parameter value for parameter name SSHKey does not exist. Rollback requested by user.

3 个答案:

答案 0 :(得分:2)

请根据您的情况找到模板。

{
   "Parameters":{
      "SSHKey":{
         "Type":"AWS::EC2::KeyPair::KeyName",
         "Description":"select the keypair SSH",
         "Default":""
      },
      "KeyPairRequired":{
         "Type":"String",
         "AllowedValues":[
            "yes",
            "no"
         ],
         "Description":"Select yes/no whether to Add key pair to instance or not."
      }
   },
   "Conditions":{
      "CreateLCWithKeyPair":{
         "Fn::Equals":[
            {
               "Ref":"KeyPairRequired"
            },
            "yes"
         ]
      },
      "CreateLCWithoutKeyPair":{
         "Fn::Equals":[
            {
               "Ref":"KeyPairRequired"
            },
            "no"
         ]
      }
   },
   "Resources":{
      "LaunchConfigWithKey":{
         "Condition":"CreateLCWithKeyPair",
         "Type":"AWS::AutoScaling::LaunchConfiguration",
         "Properties":{
            "ImageId":"ami-9eb4b1e5",
            "InstanceType":"t2.micro",
            "KeyName":{
               "Ref":"SSHKey"
            },
            "BlockDeviceMappings":[
               {
                  "DeviceName":"/dev/xvda",
                  "Ebs":{
                     "VolumeSize":"8"
                  }
               }
            ]
         }
      },
      "LaunchConfigWithoutKey":{
         "Condition":"CreateLCWithoutKeyPair",
         "Type":"AWS::AutoScaling::LaunchConfiguration",
         "Properties":{
            "ImageId":"ami-9eb4b1e5",
            "InstanceType":"t2.micro",
            "BlockDeviceMappings":[
               {
                  "DeviceName":"/dev/xvda",
                  "Ebs":{
                     "VolumeSize":"8"
                  }
               }
            ]
         }
      }
   }
}

答案 1 :(得分:1)

AWS::EC2::KeyPair::KeyName参数属于特定于AWS的参数类型,根据AWS文档和建议,模板用户必须指定其帐户中的现有AWS值。

无法在您的CloudFormation模板中保留SSHKey为空。请参考CloudFormation Parameter Syntax。在该文档的AWS Specific Parameter Types部分下,您将找到以下内容:

  

对于特定于AWS的参数类型,模板用户必须指定现有参数   其帐户中的AWS值。 AWS CloudFormation支持   遵循AWS特定类型

答案 2 :(得分:1)

如果您的帐户中有少量SSH密钥,并且您不经常更改它们,那么您可以做的一件事就是使用setcookie("cookielogin[userLoginRemembered]", $dataLoginQuery['USERID'] , $time + (60*60*24*7)); ,其中包含Type: String属性。例如:

AllowedValues

这意味着您必须在添加新SSH密钥时更新模板,但添加与您提到的类似的精美Dropdown,并且可以选择不按您的要求配置密钥。