Giter Club home page Giter Club logo

route53-transfer's Introduction

route53-transfer

Backup and restore Route53 zones, or transfer between AWS accounts.

Installation

pip install route53-transfer

Usage

Backup a zone

Backup the example.com zone to a CSV file.

route53-transfer dump example.com backup.csv

Use STDOUT instead of a file

route53-transfer dump example.com -

Restore a zone

Restore the example.com zone from a CSV file.

route53-transfer load example.com backup.csv

Use - to load from STDIN instead.

Migrate between accounts

Use the command line switches to override the access and secret keys. Dump from one account, load into another.

route53-transfer --access-key-id=ACCOUNT1 --secret-key=SECRET dump example.com
route53-transfer --access-key-id=ACCOUNT2 --secret-key=SECRET load example.com

Working with private zones

If hosting split-horizon zones, use --private to distinguish private domains.

route53-transfer --private dump example.com example-private.csv
route53-transfer dump example.com example-public.csv

When loading private zones, the target VPC region (--vpc-region) and VPC id (--vpc-id) must be specified.

route53-transfer --private --vpc-region {target vpc region} --vpc-id {target vpc id} load example.com example-private.csv

In Python

Use the load and dump functions to move data.

from StringIO import StringIO
from route53_transfer import load, dump
from boto import route53

out = StringIO()
con = route53.connect_to_region('universal')
dump(con, 'example.com', out)

route53-transfer's People

Contributors

askulkarni2 avatar blaineataffirm avatar cosimo avatar cosmin avatar gkope avatar ismferd avatar jumping avatar lra avatar migurski avatar shirkey avatar vdemin 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

route53-transfer's Issues

KeyError when trying to backup an internal domain

I got this error when I tried to backup an internal domain.

$route53-transfer dump domain.com domain.csv -I XXXX -S XXXX
Traceback (most recent call last):
  File "/usr/local/home/akulkarni/Envs/myansible/bin/route53-transfer", line 25, in <module>
    app.run(params)
  File "/usr/local/home/akulkarni/Envs/myansible/lib/python2.7/site-packages/route53_transfer/app.py", line 171, in run
    dump(con, zone_name, filename)
  File "/usr/local/home/akulkarni/Envs/myansible/lib/python2.7/site-packages/route53_transfer/app.py", line 142, in dump
    zone = get_zone(con, zone_name)
  File "/usr/local/home/akulkarni/Envs/myansible/lib/python2.7/site-packages/route53_transfer/app.py", line 53, in get_zone
    data['ns'] = zone_response['GetHostedZoneResponse']['DelegationSet']['NameServers']
KeyError: 'DelegationSet'

Error when to trying to run

route53-transfer --access-key-id=XXXXXXXXXXXXXXXX --secret-key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX dump tonton.com.my backup.csv
Traceback (most recent call last):
File "/usr/bin/route53-transfer", line 22, in
from route53_transfer import version, app
File "/usr/lib/python2.6/site-packages/route53_transfer/app.py", line 110
return {ComparableRecord(record) for record in records}

Running Python 2.6.9

More descriptive error if no AWS creds are passed

If I run route53-transfer without passing --access-key-id and --secret-key, and without setting AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in my environment, the error I get looks like an error from AWS:

$ route53-transfer dump example.com example.com.csv
ERROR: Invalid AWS credentials supplied.

It would be more clear to the user if the script validated the existence of the AWS credentials and gave a more explicit error if they were not set by either means.

Support for assumed roles

I seem to get an error when running this under an assumed role --

$ route53-transfer --access-key-id=$AWS_ACCESS_KEY_ID --secret-key=$AWS_SECRET_ACCESS_KEY dump foo.com -
Traceback (most recent call last):
  File "/usr/local/bin/route53-transfer", line 29, in <module>
    app.run(params)
  File "/usr/local/lib/python2.7/site-packages/route53_transfer/app.py", line 248, in run
    dump(con, zone_name, get_file(filename, 'w'), vpc=vpc)
  File "/usr/local/lib/python2.7/site-packages/route53_transfer/app.py", line 202, in dump
    zone = get_zone(con, zone_name, vpc)
  File "/usr/local/lib/python2.7/site-packages/route53_transfer/app.py", line 57, in get_zone
    res = con.get_all_hosted_zones()
  File "/usr/local/lib/python2.7/site-packages/boto/route53/connection.py", line 126, in get_all_hosted_zones
    body)
boto.route53.exception.DNSServerError: DNSServerError: 403 Forbidden
<?xml version="1.0"?>
<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><Error><Type>Sender</Type><Code>InvalidClientTokenId</Code><Message>The security token included in the request is invalid</Message></Error><RequestId>e23085b7-f27b-11e8-beff-6d5bf4106f1f</RequestId></ErrorResponse>

Last version

When do you upload the last version to pip repository?

public zone load fails, bad parameter value: is_private

Introduced in my PR -- fixing now, see below:

% route53-transfer load <.csv file>
Traceback (most recent call last):
File "/usr/local/bin/route53-transfer", line 4, in
import('pkg_resources').run_script('route53-transfer==0.1.2', 'route53-transfer')
File "/usr/lib/python2.7/dist-packages/pkg_resources/init.py", line 698, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python2.7/dist-packages/pkg_resources/init.py", line 1623, in run_script
exec(script_code, namespace, namespace)
File "/usr/local/lib/python2.7/dist-packages/route53_transfer-0.1.2-py2.7.egg/EGG-INFO/scripts/route53-transfer", line 28, in

File "build/bdist.linux-x86_64/egg/route53_transfer/app.py", line 230, in run
File "build/bdist.linux-x86_64/egg/route53_transfer/app.py", line 156, in load
File "build/bdist.linux-x86_64/egg/route53_transfer/app.py", line 78, in create_zone
NameError: global name 'is_private' is not defined

Sort the output

When I dump some large zone multiple times, the order of the entries is not always consistent.

Would be cool to have it sorted.

pip install route53-transfer fails

Some files are missing from the tarball, which causes setup.py to fail. Probably need to make a MANIFEST.in.

$ pip install route53-transfer
Downloading/unpacking route53-transfer
  Running setup.py egg_info for package route53-transfer
    Traceback (most recent call last):
      File "<string>", line 16, in <module>
      File "/var/folders/ty/d75lxzvx18jb5gldkst0ll180000gn/T/pip-build/route53-transfer/setup.py", line 12, in <module>
        long_description=read('README.rst'),
      File "/var/folders/ty/d75lxzvx18jb5gldkst0ll180000gn/T/pip-build/route53-transfer/setup.py", line 7, in read
        return open(os.path.join(os.path.dirname(__file__), fname)).read()
    IOError: [Errno 2] No such file or directory: '/var/folders/ty/d75lxzvx18jb5gldkst0ll180000gn/T/pip-build/route53-transfer/README.rst'
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 16, in <module>

  File "/var/folders/ty/d75lxzvx18jb5gldkst0ll180000gn/T/pip-build/route53-transfer/setup.py", line 12, in <module>

    long_description=read('README.rst'),

  File "/var/folders/ty/d75lxzvx18jb5gldkst0ll180000gn/T/pip-build/route53-transfer/setup.py", line 7, in read

    return open(os.path.join(os.path.dirname(__file__), fname)).read()

IOError: [Errno 2] No such file or directory: '/var/folders/ty/d75lxzvx18jb5gldkst0ll180000gn/T/pip-build/route53-transfer/README.rst'

----------------------------------------
Command python setup.py egg_info failed with error code 1 in /var/folders/ty/d75lxzvx18jb5gldkst0ll180000gn/T/pip-build/route53-transfer
Storing complete log in /Users/bob/.pip/pip.log

Update package version on Pypi

Hi,

The master version on the repository is on 0.1.3 and on Pypi is on 0.1.1

The version 0.1.1 is having problems with the XML lib (Probably), returning the error pasted above. When updated to 0.1.3 with pip install https://github.com/RisingOak/route53-transfer/archive/master.zip everything worked fine.

Error:

boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request
<?xml version="1.0"?>
<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><Error><Type>Sender</Type><Code>InvalidInput</Code><Message>Invalid XML ; cvc-complex-type.2.4.b: The content of element 'AliasTarget' is not complete. One of '{&quot;https://route53.amazonaws.com/doc/2013-04-01/&quot;:EvaluateTargetHealth}' is expected.</Message></Error><RequestId>d2bccaed-a5f4-11e6-9baa-873da859a4f9</RequestId></ErrorResponse>

Thanks,

Add --all option

Please, add "--all" option (or similar) to be able to backup all available zones at once. Also command "ls" would be great to have (to enlist available zones). Thank you!

Pip install failing: syntax error

I have python 3.6.2 (64-bit) and pip 9.0.1

Whenever I run

pip install route53-transfer

I get the error:

Command "python setup.py egg_info" failed with error code 1 in [AppData PATH]\pip-build-9jlz3n0x\boto\

The syntax error above seems to be pointing to a file named config.py, and the line:

print s.getValue()

I've tried everything I could find online to fix pip, but I get the feeling the problem is with this package on a newer version of Python. I'm pretty new to Python, though, so there's only so far I can trouble shoot before it's more worth it for me to just add the DNS records manually!

Thanks.

SSL: CERTIFICATE_VERIFY_FAILED

{
    "HostedZones": [
        {
            "Id": "/hostedzone/Z255CUO5PGI1PR",
            "Name": "site.com.",
            "CallerReference": "A33E0C3E-749C-871B-8BA7-1D08905FF294",
            "Config": {
                "PrivateZone": false
            },
            "ResourceRecordSetCount": 37
        },
        {
            "Id": "/hostedzone/Z3JT0AKYOEYVS0",
            "Name": "stage.site.com.",
            "CallerReference": "F644C21F-53BB-978D-A845-778E07F31E12",
            "Config": {
                "PrivateZone": false
            },
            "ResourceRecordSetCount": 18
        }
    ],
    "IsTruncated": false,
    "MaxItems": "100"
}

and when I use route53-transfer I get the following

route53-transfer dump site.com backup.csv 

Traceback (most recent call last):
  File "/home/dmitry/.pyenv/versions/site-python2/bin/route53-transfer", line 25, in <module>
    app.run(params)
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/route53_transfer/app.py", line 171, in run
    dump(con, zone_name, filename)
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/route53_transfer/app.py", line 142, in dump
    zone = get_zone(con, zone_name)
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/route53_transfer/app.py", line 47, in get_zone
    zone_response = con.get_hosted_zone_by_name(zone_name)
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/boto/route53/connection.py", line 149, in get_hosted_zone_by_name
    all_hosted_zones = self.get_all_hosted_zones()
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/boto/route53/connection.py", line 97, in get_all_hosted_zones
    params=params)
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/boto/route53/connection.py", line 80, in make_request
    headers, data)
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/boto/connection.py", line 910, in make_request
    return self._mexe(http_request, sender, override_num_retries)
  File "/home/dmitry/.pyenv/versions/2.7.11/envs/site-python2/lib/python2.7/site-packages/boto/connection.py", line 872, in _mexe
    raise e
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

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.