Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Build statuscodecov.ioJoin the chat at https://gitter.im/barnybug/cli53

cli53 - Command line tool for Amazon Route 53

Introduction

cli53 provides import and export from BIND format and simple command line management of Route 53 domains.

Features:

  • import and export BIND format

  • create, delete and list hosted zones

  • create, delete and update individual records

  • create AWS extensions: failover, geolocation, latency, weighted and ALIAS records

  • create, delete and use reusable delegation sets

Installation

Installation is easy, just download the binary from the github releases page (builds are available for Linux, Mac and Windows): https://github.com/barnybug/cli53/releases/latest

$ sudo mv cli53-my-platform /usr/local/bin/cli53
$ sudo chmod +x /usr/local/bin/cli53

Alternatively, on Mac you can install it using homebrew

$ brew install cli53

To configure your Amazon credentials, either place them in a file ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or set the environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

You can switch between different sets in the credentials file by passing --profile to any command, or setting the environment variable AWS_PROFILE. For example:

 cli53 list --profile my_profile

You can also assume a specific role by passing --role-arn to any command. For example:

 cli53 list --role-arn arn:aws:iam::123456789012:role/myRole

You can combine role with profile. For example:

 cli53 list --profile my_profile --role-arn arn:aws:iam::123456789012:role/myRole

For more information, see: http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

Note: for Alpine on Docker, the pre-built binaries do not work, so either use Debian, or follow the instructions below for Building from source.

Building from source

To build yourself from source (you will need golang >= 1.5 installed):

$ export GO15VENDOREXPERIMENT=1
$ go get github.com/barnybug/cli53/cmd/cli53

This will produce a binary cli53 in $GOPATH/bin, after this follow the steps as above.

Getting Started

Create a hosted zone:

$ cli53 create example.com --comment 'my first zone'

Check what we've done:

$ cli53 list

List also supports other output formats (eg. json for scripting using jq):

$ cli53 list -format json | jq .[].Name

Import a BIND zone file:

$ cli53 import --file zonefile.txt example.com

Replace with an imported zone, waiting for completion:

$ cli53 import --file zonefile.txt --replace --wait example.com

Also you can 'dry-run' import, to check what will happen:

$ cli53 import --file zonefile.txt --replace --wait --dry-run example.com

Create an A record pointed to 192.168.0.1 with TTL of 60 seconds:

$ cli53 rrcreate example.com 'www 60 A 192.168.0.1'

Update this A record to point to 192.168.0.2:

$ cli53 rrcreate --replace example.com 'www 60 A 192.168.0.2'

Delete the A record:

$ cli53 rrdelete example.com www A

Create an MX record:

$ cli53 rrcreate example.com '@ MX 10 mail1.' '@ MX 20 mail2.'

Create a round robin A record:

$ cli53 rrcreate example.com '@ A 127.0.0.1' '@ A 127.0.0.2'

For CNAME records, relative domains have no trailing dot, but absolute domains should:

$ cli53 rrcreate example.com 'login CNAME www'
$ cli53 rrcreate example.com 'mail CNAME ghs.googlehosted.com.'

Export as a BIND zone file (for backup!):

$ cli53 export example.com

Export fully-qualified domain names (instead of just prefixes) to stdout, and send AWS debug logging to stderr:

$ cli53 export --full --debug example.com > example.com.txt 2> example.com.err.log

Create some weighted records:

$ cli53 rrcreate --identifier server1 --weight 10 example.com 'www A 192.168.0.1'
$ cli53 rrcreate --identifier server2 --weight 20 example.com 'www A 192.168.0.2'

Create an alias to an ELB:

$ cli53 rrcreate example.com 'www AWS ALIAS A dns-name.elb.amazonaws.com. ABCDEFABCDE false'

Create an alias to an A record:

$ cli53 rrcreate example.com 'www AWS ALIAS A server1 $self false'

Create an alias to a CNAME:

$ cli53 rrcreate example.com 'docs AWS ALIAS CNAME mail $self false'

Create some geolocation records:

$ cli53 rrcreate -i Africa --continent-code AF example.com 'geo 300 IN A 127.0.0.1'
$ cli53 rrcreate -i California --country-code US --subdivision-code CA example.com 'geo 300 IN A 127.0.0.2'

Create a primary/secondary pair of health checked records:

$ cli53 rrcreate -i Primary --failover PRIMARY --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Secondary --failover SECONDARY example.com 'ha 300 IN A 127.0.0.2'

Create a multivalue record with health checks:

$ cli53 rrcreate -i One --multivalue --health-check 2e668584-4352-4890-8ffe-6d3644702a1b example.com 'ha 300 IN A 127.0.0.1'
$ cli53 rrcreate -i Two --multivalue --health-check 7c90445d-ad67-47bd-9649-3ca0985e1f88 example.com 'ha 300 IN A 127.0.0.2'

Create, list and then delete a reusable delegation set:

$ cli53 dscreate
$ cli53 dslist
$ cli53 dsdelete NA24DEGBDGB32

Further documentation is available, e.g.:

$ cli53 --help
$ cli53 rrcreate --help

Bug reports

Please open a github issue including cli53 version number cli53 --version and the commands or a zone file to reproduce the issue. A good bug report is much appreciated!

Pull requests

Pull requests are gratefully received, though please do include a test case too.

Where's python/pypi cli53?

I've since rewritten the original python cli53. As people were still installing the old version I've taken it off pypi. If you must, you can still install the python cli53 by giving pip the github branch:

$ pip install git+https://github.com/barnybug/cli53.git@python

Please note I'll no longer be supporting this any more, so any bug reports will be flatly closed!

Broken CNAME exports (GoDaddy)

Some DNS providers export broken bind files, without the trailing '.' on CNAME records. This is a requirement for absolute records (i.e. ones outside of the qualifying domain).

If you see CNAME records being imported to route53 with an extra mydomain.com on the end (e.g. ghs.google.com.mydomain.com), then you need to fix your zone file before importing:

$ perl -pe 's/((CNAME|MX\s+\d+)\s+[-a-zA-Z0-9._]+)(?!.)$/$1./i' broken.txt > fixed.txt

Private/public zones

To manage zones that have both a private and a public zone, you must specify the zone ID instead the domain name, which is ambiguous. This is the 13 character ID after '/hostedzone/' you can see in the output to 'cli53 list'. eg:

$ cli53 rrcreate ZZZZZZZZZZZZZ 'name A 127.0.0.1'

Setting Endpoint URL

Similar to the AWS CLI, the Route 53 endpoint can be set with the --endpoint-url flag. It can be a hostname or a fully qualified URL. This is particularly useful for testing.

$ cli53 list --endpoint-url "http://localhost:4580"

Caveats

As Amazon limits operations to a maximum of 100 changes, if you perform a large operation that changes over 100 resource records it will be split. An operation that involves deletes, followed by updates such as an import with --replace will very briefly leave the domain inconsistent. You have been warned!

Changelog

See: CHANGELOG

About

Command line tool for Amazon Route 53

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages