AWS Ruby SDK Cloudformation不会验证模板

AWS Ruby SDK Cloudformation不会验证模板,ruby,amazon-web-services,amazon-cloudformation,aws-sdk-ruby,Ruby,Amazon Web Services,Amazon Cloudformation,Aws Sdk Ruby,遇到ruby Cloudformation问题时,我有一个超级简单的Cloudformation模板,它将使用AWS CLI验证并创建_堆栈,但在使用ruby SDK运行相同命令时失败 $ cat net.yml AWSTemplateFormatVersion: '2010-09-09' Resources: Vpc: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 $irb irb(主):00

遇到ruby Cloudformation问题时,我有一个超级简单的Cloudformation模板,它将使用AWS CLI验证并创建_堆栈,但在使用ruby SDK运行相同命令时失败

$ cat net.yml
AWSTemplateFormatVersion: '2010-09-09'

Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16

$irb
irb(主):001:0>要求“aws sdk云信息”
=>正确
irb(主):002:1*cfn=Aws::CloudFormation::Client.new(
irb(主要):003:1*地区:'us-east-1'
irb(主要):004:0>)
irb(主):005:2*cfn.validate\u模板({
irb(主):006:2*模板体:'file://./net.yml'
irb(主):007:0>})
回溯(最近一次呼叫最后一次):
13:from/usr/bin/irb:23:in`'
12:from/usr/bin/irb:23:in'load'
11:from/usr/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in`'
10:from(irb):5
9:from/var/lib/gems/2.7.0/gems/aws-sdk-cloudformation-1.47.0/lib/aws-sdk-cloudformation/client.rb:5361:in'validate_template'
8:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/request.rb:72:in“发送请求”
7:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/plugins/response_target.rb:24:in'call'
6:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in'call'
5:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/plugins/request_callback.rb:71:in'call'
4:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in'call'
3:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/idemponency_token.rb:19:in'call'
2:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in'call'
1:from/var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/plugins/raise\u response\u errors.rb:17:in'call'
Aws::CloudFormation::Errors::ValidationError(模板格式错误:不支持的结构。)
irb(主要):008:0>
无论我是否在
模板\u body
字段中使用
文件://
,这都无关紧要。如果我将Ruby上传到S3,我可以让它使用相同的模板工作,但我不想这样做。以前有人遇到过此问题吗?

根据,模板体的值应为字符串

模板体(字符串)-包含模板体的结构,最小长度为1字节,最大长度为51200字节

因此,您只需读取文件并将其作为字符串传递给选项


irb(main):001:0> File.read('x.yml')
=> "Resources:\n        myvpc:\n                Type: AWS::EC2::VPC\n                
Properties: \n                        CidrBlock: String\n"
irb(main):002:0>


irb(main):038:0> cfn.validate_template({template_body: File.read('x.yml').to_s})
=> #<struct Aws::CloudFormation::Types::ValidateTemplateOutput parameters=[],
 description=nil, capabilities=[], capabilities_reason=nil, declared_transforms=[]>
irb(main):039:0>

irb(main):001:0>File.read('x.yml')
=>“资源:\n myvpc:\n类型:AWS::EC2::VPC\n
属性:\n CidrBlock:字符串\n“
irb(主要):002:0>
irb(main):038:0>cfn.validate_template({template_body:File.read('x.yml')。to_s})
=> #
irb(主要):039:0>
建议您通过btw退房,您会发现更多
$ irb
irb(main):001:0> require 'aws-sdk-cloudformation'
=> true
irb(main):002:1* cfn = Aws::CloudFormation::Client.new(
irb(main):003:1*   region: 'us-east-1'
irb(main):004:0> )
irb(main):005:2* cfn.validate_template({
irb(main):006:2*     template_body: 'file://./net.yml'
irb(main):007:0> })
Traceback (most recent call last):
       13: from /usr/bin/irb:23:in `<main>'
       12: from /usr/bin/irb:23:in `load'
       11: from /usr/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
       10: from (irb):5
        9: from /var/lib/gems/2.7.0/gems/aws-sdk-cloudformation-1.47.0/lib/aws-sdk-cloudformation/client.rb:5361:in `validate_template'
        8: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/request.rb:72:in `send_request'
        7: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/plugins/response_target.rb:24:in `call'
        6: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
        5: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/plugins/request_callback.rb:71:in `call'
        4: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
        3: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
        2: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in `call'
        1: from /var/lib/gems/2.7.0/gems/aws-sdk-core-3.112.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
Aws::CloudFormation::Errors::ValidationError (Template format error: unsupported structure.)
irb(main):008:0>

irb(main):001:0> File.read('x.yml')
=> "Resources:\n        myvpc:\n                Type: AWS::EC2::VPC\n                
Properties: \n                        CidrBlock: String\n"
irb(main):002:0>


irb(main):038:0> cfn.validate_template({template_body: File.read('x.yml').to_s})
=> #<struct Aws::CloudFormation::Types::ValidateTemplateOutput parameters=[],
 description=nil, capabilities=[], capabilities_reason=nil, declared_transforms=[]>
irb(main):039:0>