Class RightAws::AcfInterface
In: lib/acf/right_acf_interface.rb
Parent: RightAwsBase
RuntimeError AwsError AwsNoChange RightAWSParser RightErrorResponseParser RightHttp2xxParser AcfInterface SqsInterface SqsGen2Interface S3Interface Ec2 SdbInterface RightAwsBase ActiveSdbConnect ActiveSdb SqsGen2 S3 S3Generator Sqs RightDummyParser AWSErrorHandler AwsBenchmarkingBlock AwsUtils RightSaxParserCallback lib/sqs/right_sqs_interface.rb lib/sqs/right_sqs_gen2.rb lib/s3/right_s3.rb lib/acf/right_acf_interface.rb lib/sqs/right_sqs_gen2_interface.rb lib/sqs/right_sqs.rb lib/sdb/right_sdb_interface.rb lib/sdb/active_sdb.rb lib/ec2/right_ec2.rb lib/s3/right_s3_interface.rb lib/awsbase/right_awsbase.rb RightAwsBaseInterface VERSION RightAws dot/m_13_0.png

RightAws::AcfInterface — RightScale Amazon‘s CloudFront interface

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

Methods

Included Modules

RightAwsBaseInterface

Constants

API_VERSION = "2008-06-30"
DEFAULT_HOST = 'cloudfront.amazonaws.com'
DEFAULT_PORT = 443
DEFAULT_PROTOCOL = 'https'
DEFAULT_PATH = '/'

Public Class methods

[Source]

    # File lib/acf/right_acf_interface.rb, line 89
89:     def self.bench_service
90:       @@bench.service
91:     end

[Source]

    # File lib/acf/right_acf_interface.rb, line 86
86:     def self.bench_xml
87:       @@bench.xml
88:     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>

[Source]

     # File lib/acf/right_acf_interface.rb, line 106
106:     def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
107:       init({ :name             => 'ACF',
108:              :default_host     => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).host   : DEFAULT_HOST,
109:              :default_port     => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).port   : DEFAULT_PORT,
110:              :default_service  => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).path   : DEFAULT_PATH,
111:              :default_protocol => ENV['ACF_URL'] ? URI.parse(ENV['ACF_URL']).scheme : DEFAULT_PROTOCOL },
112:            aws_access_key_id     || ENV['AWS_ACCESS_KEY_ID'], 
113:            aws_secret_access_key || ENV['AWS_SECRET_ACCESS_KEY'], 
114:            params)
115:     end

Public Instance methods

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"}

[Source]

     # File lib/acf/right_acf_interface.rb, line 213
213:     def create_distribution(origin, comment='', enabled=true, cnames=[], caller_reference=nil)
214:       # join CNAMES
215:       cnames_str = ''
216:       unless cnames.blank?
217:         cnames.to_a.each { |cname| cnames_str += "\n           <CNAME>#{cname}</CNAME>" }
218:       end
219:       # reference
220:       caller_reference ||= generate_call_reference
221:       body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<DistributionConfig xmlns=\#{xmlns}>\n<Origin>\#{origin}</Origin>\n<CallerReference>\#{caller_reference}</CallerReference>\n\#{cnames_str.lstrip}\n<Comment>\#{AcfInterface::escape(comment.to_s)}</Comment>\n<Enabled>\#{enabled}</Enabled>\n</DistributionConfig>\n"
222:       request_hash = generate_request('POST', 'distribution', body.strip)
223:       merge_headers(request_info(request_hash, AcfDistributionParser.new))
224:     end

Delete a distribution. The enabled distribution cannot be deleted. Returns true on success or RightAws::AwsError exception.

 acf.delete_distribution('E2REJM3VUN5RSI', 'E39OHHU1ON65SI') #=> true

[Source]

     # File lib/acf/right_acf_interface.rb, line 315
315:     def delete_distribution(aws_id, e_tag)
316:       request_hash = generate_request('DELETE', "distribution/#{aws_id}", nil,
317:                                       'If-Match' => e_tag)
318:       request_info(request_hash, RightHttp2xxParser.new)
319:     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 }

[Source]

     # File lib/acf/right_acf_interface.rb, line 251
251:     def get_distribution(aws_id)
252:       request_hash = generate_request('GET', "distribution/#{aws_id}")
253:       merge_headers(request_info(request_hash, AcfDistributionParser.new))
254:     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"}

[Source]

     # File lib/acf/right_acf_interface.rb, line 267
267:     def get_distribution_config(aws_id)
268:       request_hash = generate_request('GET', "distribution/#{aws_id}/config")
269:       merge_headers(request_info(request_hash, AcfDistributionConfigParser.new))
270:     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 }, ..., {...} ]

[Source]

     # File lib/acf/right_acf_interface.rb, line 193
193:     def list_distributions
194:       request_hash = generate_request('GET', 'distribution')
195:       request_cache_or_info :list_distributions, request_hash,  AcfDistributionListParser, @@bench
196:     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

[Source]

     # File lib/acf/right_acf_interface.rb, line 287
287:     def set_distribution_config(aws_id, config)
288:       # join CNAMES
289:       cnames_str = ''
290:       unless config[:cnames].blank?
291:         config[:cnames].to_a.each { |cname| cnames_str += "\n           <CNAME>#{cname}</CNAME>" }
292:       end
293:       # format request's XML body
294:       body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<DistributionConfig xmlns=\#{xmlns}>\n<Origin>\#{config[:origin]}</Origin>\n<CallerReference>\#{config[:caller_reference]}</CallerReference>\n\#{cnames_str.lstrip}\n<Comment>\#{AcfInterface::escape(config[:comment].to_s)}</Comment>\n<Enabled>\#{config[:enabled]}</Enabled>\n</DistributionConfig>\n"
295:       request_hash = generate_request('PUT', "distribution/#{aws_id}/config", body.strip,
296:                                       'If-Match' => config[:e_tag])
297:       request_info(request_hash, RightHttp2xxParser.new)
298:     end

[Validate]