require 'rubygems' require 'hmac-sha1' require 'net/https' require 'base64' AWS_KEY = '...' AWS_SECRET = '...' CLOUDFRONT_DISTRIBUTION_ID = '...' date = Time.now.utc date = date.strftime("%a, %d %b %Y %H:%M:%S %Z") digest = HMAC::SHA1.new(AWS_SECRET) digest << date uri = URI.parse("https://cloudfront.amazonaws.com/2010-08-01/distribution/%s/invalidation" % [CLOUDFRONT_DISTRIBUTION_ID]) req = Net::HTTP::Post.new(uri.path) req.initialize_http_header({ 'x-amz-date' => date, 'Content-Type' => 'text/xml', 'Authorization' => "AWS %s:%s" % [AWS_KEY, Base64.encode64(digest.digest)] }) req.body = %|<InvalidationBatch><Path>PATH_TO_EXPIRE</Path><CallerReference>SOMETHING_SPECIAL_#{Time.now.utc.to_i}</CallerReference></InvalidationBatch>| http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE res = http.request(req) puts res.inspect puts res.body puts res.code