如何使用Fog Library在AWS中创建CDN

时间:2015-02-03 21:57:28

标签: ruby amazon-web-services cdn fog

我是DevOps世界的新手,我的公司使用Fog库为我们的开发环境部署EC2实例。我公司的一个产品需要CDN,我试图找出如何使用相同的雾库自动化CDN。

我在fog.io上找到了信息,这里是我放在makeCDN.rb中的代码(使用.sh包装器来部署它)。

#!/usr/bin/ruby
require 'fog'

# create a connection to the service
cdn = Fog::CDN.new({

 :provider               => 'AWS',
 :aws_access_key_id      => 'fake_key_id',
 :aws_secret_access_key  => '2345fake_access_key6789'
})

cdn.post_distribution({
  'CustomOrigin' => {
    'DNSName'               => 'hostname.domain.org', #example name
    'HTTPPort'              => '80',
    'OriginProtocolPolicy'  => 'match-viewer',
    'DefaultRootObject'     => '/',
    'Enabled'               => 'true',
  }

})

所以,我不确定我做错了什么,但我得到的错误是:

/home/eztheog/.rvm/gems/ruby-1.9.3-p547@fogDev/gems/excon-0.38.0/lib/excon/middlewares/expects.rb:10:in 
`response_call': Expected(201) <=> Actual(400 Bad Request) (Excon::Errors::BadRequest)
response => #<Excon::Response:0x00000001d73b78 @data={:body=>"<?xml version=\"1.0\"?>\n<ErrorResponse 
xmlns=\"http://cloudfront.amazonaws.com/doc/2010-11-01/\"><Error>
<Type>Sender</Type><Code>MalformedXML</Code><Message>1 validation error
 detected: Value null at 'distributionConfig.enabled' failed to satisfy
 constraint: Member must not be null</Message></Error>
<RequestId>c2b33cda-abee-11e4-8115-b584e1255c70</RequestId>
</ErrorResponse>", :headers=>{"x-amzn-RequestId"=>"c2b33cda-abee-11e4-8115-b584e1255c70",
 "Content-Type"=>"text/xml", "Content-Length"=>"371", "Date"=>"Tue, 03
 Feb 2015 21:51:07 GMT"}, :status=>400, :remote_ip=>"205.251.242.229",
 :local_port=>39733, :local_address=>"10.100.6.203"}, @body="<?xml 
version=\"1.0\"?>\n<ErrorResponse 
xmlns=\"http://cloudfront.amazonaws.com/doc/2010-11-01/\"><Error>
<Type>Sender</Type><Code>MalformedXML</Code><Message>1 validation error 
detected: Value null at 'distributionConfig.enabled' failed to satisfy
 constraint: Member must not be null</Message></Error>
<RequestId>c2b33cda-abee-11e4-8115-b584e1255c70</RequestId>
</ErrorResponse>", @headers={"x-amzn-RequestId"=>"c2b33cda-abee-11e4-
8115-b584e1255c70", "Content-Type"=>"text/xml", "Content-Length"=>"371",
 "Date"=>"Tue, 03 Feb 2015 21:51:07 GMT"}, @status=400, 
@remote_ip="205.251.242.229", @local_port=39733, 
@local_address="10.100.6.203">

我找到了信息here但不确定如何将信息解析为ruby文件。

我可以找到很少的博客内容来弄清楚如何做到这一点。

有人能指出正确的方向吗?

1 个答案:

答案 0 :(得分:1)

我发现这个gist解释了背景。

因此,RubyDoc.info链接(有问题)说Enabled Boolean是一个选项。但是,在AWS中它不是(或者看起来基于我得到的错误)。

但是,要解决此问题,请执行以下操作:启用=> true必须是cdn.distribution块的外部。

希望这有助于将来寻找此事的任何人!

此外,这可能是一个BUG,因为Fog库说这个功能是可选的,但AWS似乎是强制性的。