Skip to content

Instantly share code, notes, and snippets.

@milesmatthias
Created November 13, 2014 18:44
Show Gist options
  • Select an option

  • Save milesmatthias/0f877782fdb800da7ca8 to your computer and use it in GitHub Desktop.

Select an option

Save milesmatthias/0f877782fdb800da7ca8 to your computer and use it in GitHub Desktop.

Revisions

  1. milesmatthias created this gist Nov 13, 2014.
    63 changes: 63 additions & 0 deletions invalidate_cf.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,63 @@
    #!/usr/bin/env ruby

    ##
    # usage: AWS_SECRET_KEY=xxx AWS_ACCESS_KEY=xxx CF_DIST_ID=xxx ./invalidate_cf.rb file1.html file2.html
    #

    #
    require 'aws'
    require 'date'
    require 'pry'

    aws_secret_key = ENV['AWS_SECRET_KEY']
    aws_access_key = ENV['AWS_ACCESS_KEY']
    cf_dist_id = ENV['CF_DIST_ID']

    if [aws_secret_key, aws_access_key, cf_dist_id].include?(nil)
    abort 'usage: AWS_SECRET_KEY=xxx AWS_ACCESS_KEY=xxx CF_DIST_ID=xxx ./invalidate_cf.rb "/file1.html" "/file2.html"'
    end


    #
    files = ARGV

    if files.count == 0
    abort 'usage: AWS_SECRET_KEY=xxx AWS_ACCESS_KEY=xxx CF_DIST_ID=xxx ./invalidate_cf.rb "/file1.html" "/file2.html"'
    end

    #
    cf = AWS::CloudFront.new({
    :access_key_id => aws_access_key,
    :secret_access_key => aws_secret_key
    })

    invalidation = cf.client.create_invalidation({
    :distribution_id => cf_dist_id,
    :invalidation_batch => {
    :paths => {
    :quantity => files.count,
    :items => files
    },
    :caller_reference => "INVALIDATE_CF_" + DateTime.now.to_s
    }
    }).data

    puts "invalidation status: #{invalidation[:status]}"



    #
    status = invalidation[:status]

    while status == 'InProgress'
    response = cf.client.get_invalidation({
    :distribution_id => cf_dist_id,
    :id => invalidation[:id]
    })

    status = response.data[:status]
    puts "status = #{ status }"
    sleep(rand(30))
    end