AWS cloudformation错误:模板验证错误:模板参数属性无效

时间:2014-08-28 20:21:33

标签: validation templates amazon-web-services amazon-ec2

我正在尝试创建要使用的cloudformation模板,但我不断收到上述错误。 以下是我的模板片段:

"Mappings" : {
    "AWSInstanceType2Arch" : {
            "t1.micro" : { "Arch" : "64" },
            "m1.small" : { "Arch" : "64" },
            "m1.medium" : { "Arch" : "64" },
            "m1.large" : { "Arch" : "64" },
            "m1.xlarge" : { "Arch" : "64" },
            "m2.xlarge" : { "Arch" : "64" },
            "m2.2xlarge" : { "Arch" : "64" },
            "m2.4xlarge" : { "Arch" : "64" },
            "m3.xlarge" : { "Arch" : "64" },
            "m3.2xlarge" : { "Arch" : "64" },
            "c1.medium" : { "Arch" : "64" },
            "c1.xlarge" : { "Arch" : "64" },
            "cc1.4xlarge" : { "Arch" : "64HVM" },
            "cc2.8xlarge" : { "Arch" : "64HVM" },
            "cg1.4xlarge" : { "Arch" : "64HVM" }
        },
    "AWSRegionArch2AMI" : {
                "us-west-2": {"AMI": "ami-1b3b462b"}
         }
     },

  "Resources": {
    "Ec2Instance" : {
          "Type" : "AWS::EC2::Instance",
    "Properties": {
        "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" },
        { "Fn::FindInMap": [ "AWSInstanceType2Arch", {"Ref": "InstanceType"}, "Arch" ] } ] },
            "InstanceType": {"Ref": "InstanceType"},
            "SecurityGroups": [ { "Ref": "SecurityGroups"} ],
            "KeyName": { "Ref": "KeyName" },
            "Tags": [ { "Key": "Name", "Value": { "Ref": "InstanceName" } } ] }
    },

我在底部发生了更多事情,比如要执行的bash脚本,除非我无法通过这个问题。我错过了什么?

7 个答案:

答案 0 :(得分:6)

我在寻找同一错误消息的解决方案时遇到了这个问题。

就我而言,我收到了错误:

  

无效的模板参数属性“属性”

这是因为我将资源定义放在模板的“Parameters”:{}部分而不是“Resources”:{}部分。

错误消息是这样的,因为Resources有“属性”部分,但“属性”对于参数无效。

答案 1 :(得分:1)

当我尝试将输出添加到模板时,我收到了相同的错误消息。

$ aws cloudformation validate-template --template-body "$(cat aws/vpc/production.template)"

A client error (ValidationError) occurred when calling the ValidateTemplate operation: Invalid template resource property 'InfrastructureIP'

我的问题是我在“资源”下添加了输出而不是之后。

INCORRECT

{
 "AWSTemplateFormatVersion" : "2010-09-09",

  "Parameters" : {
    #Some parameters
  },

  "Resources" : {
    #Whole lot of resources
    "Outputs" : {
      "InfrastructureIP" : {
        "Description": "The private IP of Infrastructure",  
        "Value" : { "Fn::GetAtt" : [ "Infrastructure", "PrivateIp" ] }
      }
    }
  }
}

CORRECT

{
 "AWSTemplateFormatVersion" : "2010-09-09",

  "Parameters" : {
    #Some parameters
  },

  "Resources" : {
    #Whole lot of resources
  },

  "Outputs" : {
    "InfrastructureIP" : {
      "Description": "The private IP of Infrastructure",  
      "Value" : { "Fn::GetAtt" : [ "Infrastructure", "PrivateIp" ] }
    }
  }
}

答案 2 :(得分:0)

我有一个像security groups这样的变量名,我通过做securityGroups来摆脱了这个错误

检查您的json键以获取正确的命名约定

答案 3 :(得分:0)

就我而言,我将模板文件中的输出称为[Output],而不是[Outputs],从而导致此问题。

答案 4 :(得分:0)

我在寻找问题的解决方案时遇到了这个问题-

<块引用>

错误是无效的模板属性或属性

就我而言,这是 spacing 问题。因此,在我的情况下,我们使用 jinja 生成模板,而一种模板方法(生成 output)没有适当的缩进或空格。数小时后解决问题后终于解决了。

答案 5 :(得分:0)

检查是否有任何空格丢失或任何名称错误的属性(记住属性区分大小写)。 所以“属性”是正确的,但“属性”不是。 'KeyType' 是正确的,但 'keyType' 不是。

因此,问题可能在于未遵循间距或命名约定

答案 6 :(得分:-1)

是间距问题。固定。模板可能很棘手。