JSON格式错误-Amzon EC2实例创建

时间:2014-09-05 19:51:06

标签: java json amazon-web-services amazon-ec2

我正在通过Java Eclipse创建Amazon Stack。

下面的代码行抛出错误

csr.setTemplateURL("https://s3.amazonaws.com/cloudformation-templates-us-east-  1/AutoScalingMultiAZSample.template");

我收到的错误是:

Caught Exception:参数:[KeyName]必须具有值(Service:AmazonCloudFormation; Status Code:400; Error Code:ValidationError; Request ID:9363d711-3535-11e4-8cf2-913ef42879cb) 响应状态代码:400

我的json模板网址是 https://s3.amazonaws.com/cloudformation-templates-us-east-1/AutoScalingMultiAZSample.template

请帮助解决此问题的确切来源。

1 个答案:

答案 0 :(得分:1)

好的,我尝试使用在线验证器验证您的json架构。

http://jsonlint.com/

我刚刚复制了你的json架构并粘贴在那里。它说无效模式期待{在第1行。确定我必须在你的模式之间放置开始和结束括号。但它再次给出了错误。额外的支架}在最后一行。所以我不得不删除它。然后验证了json模式。它意味着您的架构中的某个位置会放置一个额外的结束括号}。

我认为你犯错误的地方是:

"InstanceSecurityGroup" : {
      "Type" : "AWS::EC2::SecurityGroup",
      "Properties" : {
        "GroupDescription" : "Enable SSH access and HTTP from the load balancer only",
        "SecurityGroupIngress" : [ {
          "IpProtocol" : "tcp",
          "FromPort" : "22",
          "ToPort" : "22",
          "CidrIp" : { "Ref" : "SSHLocation"}
        },
        {
          "IpProtocol" : "tcp",
          "FromPort" : { "Ref" : "WebServerPort" },
          "ToPort" : { "Ref" : "WebServerPort" },
          "SourceSecurityGroupOwnerId" : {"Fn::GetAtt" : ["ElasticLoadBalancer", "SourceSecurityGroup.OwnerAlias"]},
          "SourceSecurityGroupName" : {"Fn::GetAtt" : ["ElasticLoadBalancer", "SourceSecurityGroup.GroupName"]}
        } ]
      }
    }//Extra Bracket i think so
  },

  "Outputs" : {
    "URL" : {
      "Description" : "The URL of the website",
      "Value" :  { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}]]}
    }
  }
}