Giter VIP home page Giter VIP logo

route53-cli's Introduction

Route53 Query

PLEASE USE SURF (INCLUDES R53) CLI FOR A MUCH RICHER EXPERIENCE:

Visit surf cli repo.

image info

Move fast with custom CLI for Route53.

Get info about your Route53 records from the Command line - quickly!

  • Direct link to resource on AWS Console.
  • Automatic verification of Nameservers against the real world.
  • Recursive search for all results via -R flag.
  • Supports any ~/.aws/credentials profile.
  • Works directly against AWS API.

The Problem

Ever wondered "what records are behind this R53 record I have?"

i.e Where does app.foo.goo.website.com points to in R53?

Without route53-cli:

Go to browser -> AWS console -> login -> Route53 -> find the hosted zone -> find the record

Even if you find the record in the AWS console you can't be sure this is the source of truth since the record could be defined in multiple route 53 hosted zones of the organization. The only way to verify is by comparing the Nameservers in the real world.

The solution

  • The CLI will use the default AWS login methods and query the Route53 API in a smart way to find the record.
  • By default the nameservers will be verified against the real world via Dig implementation (turn off via --skip-ns).
  • Search recursivly and expand all the records until the "leaf".
  • Direct Web URL to the resource from the terminal.
  • SDK support for programatic access and JSON output.

With route53-cli:

Input

r53 -r 'app.foo.goo.website.com'

Output

┌─────────────────┬────────────────────────────┬───────────────┬─────────┐
│ HOSTED ZONE     │ ID                         │ TOTAL RECORDS │ PRIVATE │
├─────────────────┼────────────────────────────┼───────────────┼─────────┤
│ website.com.    │ /hostedzone/ABFDCEWQSFDSFD │           127 │ false   │
└─────────────────┴────────────────────────────┴───────────────┴─────────┘

+---+-----------------------|------------------------|--------------------------------------|---------+
| # | Record                | Target                 | Console Link                         | TYPE    |
+---+-----------------------|------------------------|--------------------------------------|---------+
| 1 | *.foo.goo.website.com | r-re1.website.com.     |                                      | A       |
+---+-----------------------|------------------------|--------------------------------------|---------+
| 2 | *.foo.goo.website.com | r-re2.website.com.     |                                      | A       |
+---+-----------------------|------------------------|--------------------------------------|---------+
| 3 | r-re1.website.com.    | lb1.elb.amazonaws.com  | https://console.aws.amazon.com/alb-1 | A       |
+---+-----------------------|------------------------|--------------------------------------|---------+
| 4 | r-re2.website.com.    | lb2.elb.amazonaws.com  | https://console.aws.amazon.com/alb-2 | A       |
+---+-----------------------|------------------------|------------------------------------------------+

Programatic Access

Use the output with another program:

r53 -r 'my.domain.com' --output-json --output-file output.json

Use the code in SDK mode (another go project):

package main

import (
	"fmt"

	"github.com/isan-rivkin/route53-cli/sdk"
)

func main() {
	input, _ := sdk.NewInput("my.company.com", "my-aws-conf-profile", false, false, false, true, 3)
	result, _ := sdk.SearchR53(input)
	jsonOut, _ := sdk.ToJSONOutput(result, true)
	fmt.Println(string(jsonOut))
}
 

Install

Brew

MacOS (and ubuntu supported) installation via Brew:

brew tap isan-rivkin/toolbox
brew install r53

Download Binary

  1. from releases

  2. Move the binary to global dir and change name to r53:

cd <downloaded zip dir>
mv r53 /usr/local/bin

Install from Source

git clone 
cd route53-cli
make install BIN_DIR='/path/to/target/bin/dir'

Version Check

The CLI will query anonymously a remote version server to check if the current version of the CLI is updated. If the current client version indeed outdated the server will return instructions for update.

The server will add the request to a hit counter stored internaly for usage metrics.

None of the user query are passed to the server, only OS type and version.

The route53 querys themselves are done directly via the AWS Api.

This behaviour is on by default and can be optouted out via setting the envrionment variable R53_VERSION_CHECK=false.

How it works

Example pseudocode:

# i.e https://example.com/p/a?ok=11&not=23
# into example.com 
record = '*.<a>.<b><c>.<d>'
record = strip_non_domain(record)
record = split(record)
 
hasWildCard = record[0] == '*'
len == record.length
# a 
if len == 1 and not hasWildCard: 
    lookup(1)
# *.a
if len == 2 and hasWildCard:  
    lookup(1)
# a.b
if len == 2 and not hasWildCard:  
    lookup(2)
# *.a.b
if len == 3 and hasWildCard: 
    lookup(2)
# a.b.c
if len == 3 and hasWildCard: 
    if not lookup(2)
        lookup(3)
# *.a.b.c.d.e
if len > 3:
    for chunksNum in (2, len):
        if (chunksNum == len and hasWildCard):
            return None
        if res = lookup(chunksNum)
            return res 

def lookup(dnsChunk):
    zoneIds = getZoneIds(dnsChunk)
    for zoneId in zoneIds:
        if zoneId name == dnsChunk: 
            aliasTargets = getAliasTargets(record, zoneId)
            return aliasTargetes

route53-cli's People

Contributors

isan-rivkin avatar lavie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.