Cfdef is a tool to manage CloudFront.
Ruby Shell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
exe
lib
spec
.gitignore
.rspec
.travis.yml
Gemfile
LICENSE.txt
README.md
Rakefile
cfdef.gemspec

README.md

Cfdef

Cfdef is a tool to manage CloudFront.

It defines the state of CloudFront using DSL, and updates CloudFront according to DSL.

Installation

Add this line to your application's Gemfile:

gem 'cfdef'

And then execute:

$ bundle

Or install it yourself as:

$ gem install cfdef

Usage

export AWS_ACCESS_KEY_ID='...'
export AWS_SECRET_ACCESS_KEY='...'
cfdef -e -o CFfile  # export CloudFront
vi CFfile
cfdef -a --dry-run
cfdef -a            # apply `CFfile`

Help

Usage: cfdef [options]
    -k, --access-key ACCESS_KEY
    -s, --secret-key SECRET_KEY
    -r, --region REGION
        --profile PROFILE
        --credentials-path PATH
    -a, --apply
    -f, --file FILE
        --dry-run
    -e, --export
    -o, --output FILE
        --split
        --target-origin ID_RGX
        --use-braces
        --no-color
        --debug

CFfile example

require 'other/cffile'

distribution "EXAMPLEID" do
  aliases do
    quantity 0
  end
  origins do
    quantity 2
    items do |*|
      id "Custom-ehxample.cpm"
      domain_name "example.cpm"
      origin_path ""
      custom_headers do
        quantity 0
      end
      custom_origin_config do
        http_port 80
        https_port 443
        origin_protocol_policy "http-only"
        origin_ssl_protocols do
          quantity 3
          items ["TLSv1", "TLSv1.1", "TLSv1.2"]
        end
      end
    end
    items do |*|
      id "S3-example"
      domain_name "example.s3.amazonaws.com"
      origin_path ""
      custom_headers do
        quantity 0
      end
      s3_origin_config do
        origin_access_identity ""
      end
    end
  end
  default_cache_behavior do
    target_origin_id "S3-example"
    forwarded_values do
      query_string false
      cookies do
        forward "none"
      end
      headers do
        quantity 0
      end
    end
    trusted_signers do
      enabled false
      quantity 0
    end
    viewer_protocol_policy "allow-all"
    min_ttl 0
    allowed_methods do
      quantity 2
      items ["GET", "HEAD"]
      cached_methods do
        quantity 2
        items ["GET", "HEAD"]
      end
    end
    smooth_streaming false
    default_ttl 86400
    max_ttl 31536000
    compress false
  end
  cache_behaviors do
    quantity 0
  end
  custom_error_responses do
    quantity 0
  end
  comment ""
  price_class "PriceClass_All"
  enabled true
  viewer_certificate do
    cloud_front_default_certificate true
    minimum_protocol_version "SSLv3"
    certificate_source "cloudfront"
  end
  restrictions do
    geo_restriction do
      restriction_type "none"
      quantity 0
    end
  end
  web_acl_id ""
end

Create Distribution

$ cat CFfile
distribution do # without ID
  ...
end

$ cfdef -a

Identify Distribution using Origin IDs if there is no Distribution ID.

Delete Distribution

$ cat CFfile
distribution "EXAMPLEID" do
  ...
  enable false
  ...
end

$ cfdef -a
...

$ cat CFfile
# comment out
#distribution "EXAMPLEID" do
#  ...
#end

$ cfdef -a

Use braces

Export with --use-braces option.

distribution("EXAMPLEID") {
  aliases {
    quantity 0
  }
  origins {
    quantity 1
    items {|*|
      id "Custom-example.com"
      domain_name "example.com"
      origin_path ""
      custom_headers {
        quantity 0
      }
      custom_origin_config {
        http_port 80
        https_port 443
        origin_protocol_policy "http-only"
        origin_ssl_protocols {
          quantity 3
          items ["TLSv1", "TLSv1.1", "TLSv1.2"]
        }
      }
    }
  }
  default_cache_behavior {
    target_origin_id "Custom-example.com"
    forwarded_values {
      query_string false
      cookies {
        forward "none"
      }
      headers {
        quantity 0
      }
    }
    trusted_signers {
      enabled false
      quantity 0
    }
    viewer_protocol_policy "allow-all"
    min_ttl 0
    allowed_methods {
      quantity 2
      items ["GET", "HEAD"]
      cached_methods {
        quantity 2
        items ["GET", "HEAD"]
      }
    }
    smooth_streaming false
    default_ttl 86400
    max_ttl 31536000
    compress false
  }
  cache_behaviors {
    quantity 0
  }
  custom_error_responses {
    quantity 0
  }
  comment ""
  price_class "PriceClass_All"
  enabled true
  viewer_certificate {
    cloud_front_default_certificate true
    minimum_protocol_version "SSLv3"
    certificate_source "cloudfront"
  }
  restrictions {
    geo_restriction {
      restriction_type "none"
      quantity 0
    }
  }
  web_acl_id ""
}

ToDo

  • Support Streaming Distribution

Similar tools