簡體   English   中英

AWS Ruby SDK Cloudformation 不會驗證模板

[英]AWS Ruby SDK Cloudformation will not validate a template

遇到 ruby Cloudformation 問題我有一個超級簡單的 cloudformation 模板將使用 AWS CLI 驗證和 create_stack,但是當我使用 Ruby ZF20E3C5E54C0AB3D675D660B3F 運行相同的命令時失敗。

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

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

$ aws cloudformation validate-template --region us-east-1 --template-body file://./net.yml
{
    "Parameters": []
}
$ 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>

我是否在template_body字段中使用file://都沒有關系。 如果我將 Ruby 上傳到 S3,我可以讓它使用相同的模板,但我不想這樣做。 以前有人遇到過這個問題嗎?

根據文檔template_body的值應該是一個字符串

template_body (String) — 包含模板主體的結構,最小長度為 1 字節,最大長度為 51,200 字節

所以你只需要讀取文件並將其作為字符串傳遞給選項。


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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM