RightAwsBase
The AcfInterface class provides a complete interface to Amazon's CloudFront service.
For explanations of the semantics of each call, please refer to Amazon's documentation at developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=211
Example:
acf = RightAws::AcfInterface.new('1E3GDYEOGFJPIT7XXXXXX','hgTHt68JY07JKUY08ftHYtERkjgtfERn57XXXXXX') list = acf.list_distributions #=> [{:status => "Deployed", :domain_name => "d74zzrxmpmygb.6hops.net", :aws_id => "E4U91HCJHGXVC", :origin => "my-bucket.s3.amazonaws.com", :cnames => ["x1.my-awesome-site.net", "x1.my-awesome-site.net"] :comment => "My comments", :last_modified_time => Wed Sep 10 17:00:04 UTC 2008 }, ..., {...} ] distibution = list.first info = acf.get_distribution(distibution[:aws_id]) #=> {:enabled => true, :caller_reference => "200809102100536497863003", :e_tag => "E39OHHU1ON65SI", :status => "Deployed", :domain_name => "d3dxv71tbbt6cd.6hops.net", :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"] :aws_id => "E2REJM3VUN5RSI", :comment => "Woo-Hoo!", :origin => "my-bucket.s3.amazonaws.com", :last_modified_time => Wed Sep 10 17:00:54 UTC 2008 } config = acf.get_distribution_config(distibution[:aws_id]) #=> {:enabled => true, :caller_reference => "200809102100536497863003", :e_tag => "E39OHHU1ON65SI", :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"] :comment => "Woo-Hoo!", :origin => "my-bucket.s3.amazonaws.com"} config[:comment] = 'Olah-lah!' config[:enabled] = false config[:cnames] << "web3.my-awesome-site.net" acf.set_distribution_config(distibution[:aws_id], config) #=> true
# File lib/acf/right_acf_interface.rb, line 89 def self.bench_service @@bench.service end
# File lib/acf/right_acf_interface.rb, line 86 def self.bench_xml @@bench.xml end
Create a new handle to a CloudFront account. All handles share the same per process or per thread HTTP connection to CloudFront. Each handle is for a specific account. The params have the following options:
:server: CloudFront service host, default: DEFAULT_HOST
:port: CloudFront service port, default: DEFAULT_PORT
:protocol: 'http' or 'https', default: DEFAULT_PROTOCOL
:multi_thread: true=HTTP connection per thread, false=per process
:logger: for log messages, default: RAILS_DEFAULT_LOGGER else STDOUT
:cache: true/false: caching for list_distributions method, default: false.
acf = RightAws::AcfInterface.new('1E3GDYEOGFJPIT7XXXXXX','hgTHt68JY07JKUY08ftHYtERkjgtfERn57XXXXXX', {:multi_thread => true, :logger => Logger.new('/tmp/x.log')}) #=> #<RightAws::AcfInterface::0xb7b3c30c>
# File lib/acf/right_acf_interface.rb, line 106 def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={}) init({ :name => 'ACF', :default_host => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).host : DEFAULT_HOST, :default_port => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).port : DEFAULT_PORT, :default_service => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).path : DEFAULT_PATH, :default_protocol => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).scheme : DEFAULT_PROTOCOL }, aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key || ENV['AWS_SECRET_ACCESS_KEY'], params) end
Create a new distribution. Returns the just created distribution or RightAws::AwsError exception.
acf.create_distribution('bucket-for-k-dzreyev.s3.amazonaws.com', 'Woo-Hoo!', true, ['web1.my-awesome-site.net'] ) #=> {:comment => "Woo-Hoo!", :enabled => true, :location => "https://cloudfront.amazonaws.com/2008-06-30/distribution/E2REJM3VUN5RSI", :status => "InProgress", :aws_id => "E2REJM3VUN5RSI", :domain_name => "d3dxv71tbbt6cd.6hops.net", :origin => "my-bucket.s3.amazonaws.com", :cnames => ["web1.my-awesome-site.net"] :last_modified_time => Wed Sep 10 17:00:54 UTC 2008, :caller_reference => "200809102100536497863003"}
# File lib/acf/right_acf_interface.rb, line 213 def create_distribution(origin, comment='', enabled=true, cnames=[], caller_reference=nil) # join CNAMES cnames_str = '' unless cnames.blank? cnames.to_a.each { |cname| cnames_str += "\n <CNAME>#{cname}</CNAME>" } end # reference caller_reference ||= generate_call_reference body = <?xml version="1.0" encoding="UTF-8"?> <DistributionConfig xmlns=#{xmlns}> <Origin>#{origin}</Origin> <CallerReference>#{caller_reference}</CallerReference> #{cnames_str.lstrip} <Comment>#{AcfInterface::escape(comment.to_s)}</Comment> <Enabled>#{enabled}</Enabled> </DistributionConfig> request_hash = generate_request('POST', 'distribution', body.strip) merge_headers(request_info(request_hash, AcfDistributionParser.new)) end
Delete a distribution. The enabled distribution cannot be deleted. Returns true on success or RightAws::AwsError exception.
acf.delete_distribution('E2REJM3VUN5RSI', 'E39OHHU1ON65SI') #=> true
# File lib/acf/right_acf_interface.rb, line 313 def delete_distribution(aws_id, e_tag) request_hash = generate_request('DELETE', "distribution/#{aws_id}", nil, 'If-Match' => e_tag) request_info(request_hash, RightHttp2xxParser.new) end
Get a distribution's information. Returns a distribution's information or RightAws::AwsError exception.
acf.get_distribution('E2REJM3VUN5RSI') #=> {:enabled => true, :caller_reference => "200809102100536497863003", :e_tag => "E39OHHU1ON65SI", :status => "Deployed", :domain_name => "d3dxv71tbbt6cd.6hops.net", :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"] :aws_id => "E2REJM3VUN5RSI", :comment => "Woo-Hoo!", :origin => "my-bucket.s3.amazonaws.com", :last_modified_time => Wed Sep 10 17:00:54 UTC 2008 }
# File lib/acf/right_acf_interface.rb, line 250 def get_distribution(aws_id) request_hash = generate_request('GET', "distribution/#{aws_id}") merge_headers(request_info(request_hash, AcfDistributionParser.new)) end
Get a distribution's configuration. Returns a distribution's configuration or RightAws::AwsError exception.
acf.get_distribution_config('E2REJM3VUN5RSI') #=> {:enabled => true, :caller_reference => "200809102100536497863003", :e_tag => "E39OHHU1ON65SI", :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"] :comment => "Woo-Hoo!", :origin => "my-bucket.s3.amazonaws.com"}
# File lib/acf/right_acf_interface.rb, line 266 def get_distribution_config(aws_id) request_hash = generate_request('GET', "distribution/#{aws_id}/config") merge_headers(request_info(request_hash, AcfDistributionConfigParser.new)) end
List distributions. Returns an array of distributions or RightAws::AwsError exception.
acf.list_distributions #=> [{:status => "Deployed", :domain_name => "d74zzrxmpmygb.6hops.net", :aws_id => "E4U91HCJHGXVC", :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"] :origin => "my-bucket.s3.amazonaws.com", :comment => "My comments", :last_modified_time => Wed Sep 10 17:00:04 UTC 2008 }, ..., {...} ]
# File lib/acf/right_acf_interface.rb, line 193 def list_distributions request_hash = generate_request('GET', 'distribution') request_cache_or_info :list_distributions, request_hash, AcfDistributionListParser, @@bench end
Set a distribution's configuration (the :origin and the :caller_reference cannot be changed). Returns true on success or RightAws::AwsError exception.
config = acf.get_distribution_config('E2REJM3VUN5RSI') #=> {:enabled => true, :caller_reference => "200809102100536497863003", :e_tag => "E39OHHU1ON65SI", :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"] :comment => "Woo-Hoo!", :origin => "my-bucket.s3.amazonaws.com"} config[:comment] = 'Olah-lah!' config[:enabled] = false acf.set_distribution_config('E2REJM3VUN5RSI', config) #=> true
# File lib/acf/right_acf_interface.rb, line 286 def set_distribution_config(aws_id, config) # join CNAMES cnames_str = '' unless config[:cnames].blank? config[:cnames].to_a.each { |cname| cnames_str += "\n <CNAME>#{cname}</CNAME>" } end # format request's XML body body = <?xml version="1.0" encoding="UTF-8"?> <DistributionConfig xmlns=#{xmlns}> <Origin>#{config[:origin]}</Origin> <CallerReference>#{config[:caller_reference]}</CallerReference> #{cnames_str.lstrip} <Comment>#{AcfInterface::escape(config[:comment].to_s)}</Comment> <Enabled>#{config[:enabled]}</Enabled> </DistributionConfig> request_hash = generate_request('PUT', "distribution/#{aws_id}/config", body.strip, 'If-Match' => config[:e_tag]) request_info(request_hash, RightHttp2xxParser.new) end
Generated with the Darkfish Rdoc Generator 2.