NAME
    WebService::Amazon::Route53 - Perl interface to Amazon Route 53 API

VERSION
    Version 0.01

SYNOPSIS
    WebService::Amazon::Route53 provides an interface to Amazon Route 53 DNS
    service.

        use WebService::Amazon::Route53;

        my $r53 = WebService::Amazon::Route53->new(id => 'ROUTE53ID',
                                                   key => 'SECRETKEY');
    
        # Create a new zone
        $r53->create_hosted_zone(name => 'example.com.',
                                 caller_reference => 'example.com_migration_01');
    
        # Get zone information
        my $zone = $r53->find_hosted_zone(name => 'example.com.');
    
        # Create a new record
        $r53->change_resource_record_sets(zone_id => $zone->{id},
                                          action => 'create',
                                          name => 'www.example.com.',
                                          type => 'A',
                                          ttl => 86400,
                                          value => '12.34.56.78');

        # Modify records
        $r53->change_resource_record_sets(zone_id => $zone->{id},
            changes => [
                {
                    action => 'delete',
                    name => 'www.example.com.',
                    type => 'A',
                    ttl => 86400,
                    value => '12.34.56.78'
                },
                {
                    action => 'create',
                    name => 'www.example.com.',
                    type => 'A',
                    ttl => 86400,
                    records => [
                        '34.56.78.90',
                        '56.78.90.12'
                    ]
                }
            ]);

METHODS
    Required parameters are marked as such, other parameters are optional.

    Instance methods return "undef" on failure. More detailed error
    information can be obtained by calling "error".

  new
    Creates a new instance of WebService::Amazon::Route53.

        my $r53 = WebService::Amazon::Route53->new(id => 'ROUTE53ID',
                                                   key => 'SECRETKEY');

    Parameters:

    *   id

        (Required) AWS access key ID.

    *   key

        (Required) Secret access key.

  list_hosted_zones
    Gets a list of hosted zones.

    Called in scalar context:

        $zones = $r53->list_hosted_zones(max_items => 15);

    Called in list context:

        ($zones, $next_marker) = $r53->list_hosted_zones(marker => '456ZONEID',
                                                         max_items => 15);

    Parameters:

    *   marker

        Indicates where to begin the result set. This is the ID of the last
        hosted zone which will not be included in the results.

    *   max_items

        The maximum number of hosted zones to retrieve.

    Returns: A reference to an array of hash references, containing zone
    data. Example:

        $zones = [
            {
                'id' => '/hostedzone/123ZONEID',
                'name' => 'example.com.',
                'caller_reference' => 'ExampleZone',
                'config' => {
                    'comment' => 'This is my first hosted zone'
                }
            },
            {
                'id' => '/hostedzone/456ZONEID',
                'name' => 'example2.com.',
                'caller_reference' => 'ExampleZone2',
                'config' => {
                    'comment' => 'This is my second hosted zone'
                }
            }
        ];

    When called in list context, it also returns the next marker to pass to
    a subsequent call to "list_hosted_zones" to get the next set of results.
    If this is the last set of results, next marker will be "undef".

  get_hosted_zone
    Gets hosted zone data.

        $zone = get_hosted_zone(zone_id => '123ZONEID');

    Parameters:

    *   zone_id

        (Required) Hosted zone ID.

    Returns: A reference to a hash containing zone data. Example:

        $zone = {
            'id' => '/hostedzone/123ZONEID'
            'name' => 'example.com.',
            'caller_reference' => 'ExampleZone',
            'config' => {
                'comment' => 'This is my first hosted zone'
            }
        };

  find_hosted_zone
    Finds the first hosted zone with the given name.

        $zone = $r53->find_hosted_zone(name => 'example.com.');

    Parameters:

    *   name

        (Required) Hosted zone name.

    Returns: A reference to a hash containing zone data (see
    "get_hosted_zone"), or 0 if there is no hosted zone with the given name.

  create_hosted_zone
    Creates a new hosted zone.

        $response = $r53->create_hosted_zone(name => 'example.com.',
                                             caller_reference => 'example.com_01');

    Parameters:

    *   name

        (Required) New hosted zone name.

    *   caller_reference

        (Required) A unique string that identifies the request.

    Returns: A reference to a hash containing new zone data, change
    description, and name servers information. Example:

        $response = {
            'zone' => {
                'id' => '/hostedzone/123ZONEID'
                'name' => 'example.com.',
                'caller_reference' => 'example.com_01',
                'config' => {}
            },
            'change_info' => {
                'id' => '/change/123CHANGEID'
                'submitted_at' => '2011-08-30T23:54:53.221Z',
                'status' => 'PENDING'
            },
            'delegation_set' => {
                'name_servers' => [
                    'ns-001.awsdns-01.net',
                    'ns-002.awsdns-02.net',
                    'ns-003.awsdns-03.net',
                    'ns-004.awsdns-04.net'
                ]
            },
        };

  delete_hosted_zone
    Deletes a hosted zone.

        $change_info = $r53->delete_hosted_zone(zone_id => '123ZONEID');

    Parameters:

    *   zone_id

        (Required) Hosted zone ID.

    Returns: A reference to a hash containing change information. Example:

        $change_info = {
            'id' => '/change/123CHANGEID'
            'submitted_at' => '2011-08-31T00:04:37.456Z',
            'status' => 'PENDING'
        };

  list_resource_record_sets
    Lists resource record sets for a hosted zone.

    Called in scalar context:

        $record_sets = $r53->list_resource_record_sets(zone_id => '123ZONEID');

    Called in list context:

        ($record_sets, $next_record) = $r53->list_resource_record_sets;

    Parameters:

    *   zone_id

        (Required) Hosted zone ID.

    *   name

        The first domain name (in lexicographic order) to retrieve.

    *   type

        DNS record type of the next resource record set to retrieve.

    *   identifier

        Set identifier for the next source record set to retrieve. This is
        needed when the previous set of results has been truncated for a
        given DNS name and type.

    *   max_items

        The maximum number of records to be retrieved. The default is 100,
        and it's the maximum allowed value.

    Returns: A reference to an array of hash references, containing record
    set data. Example:

        $record_sets = [
            {
                name => 'example.com.',
                type => 'MX'
                ttl => 86400,
                records => [
                    '10 mail.example.com'
                ]
            },
            {
                name => 'example.com.',
                type => 'NS',
                ttl => 172800,
                records => [
                    'ns-001.awsdns-01.net.',
                    'ns-002.awsdns-02.net.',
                    'ns-003.awsdns-03.net.',
                    'ns-004.awsdns-04.net.'
                ]
            }
        ];

    When called in list context, it also returns a reference to a hash,
    containing information on the next record which can be passed to a
    subsequent call to "list_resource_record_sets" to get the next set of
    records (using the "name" and "type" parameters). Example:

        $next_record = {
            name => 'www.example.com.',
            type => 'A'
        };

    If this is the last set of records, next record will be "undef".

  change_resource_record_sets
    Makes changes to DNS record sets.

        $change_info = $r53->change_resource_record_sets(zone_id => '123ZONEID',
                changes => [
                    # Delete the current A record
                    {
                        action => 'delete',
                        name => 'www.example.com.',
                        type => 'A',
                        ttl => 86400,
                        value => '12.34.56.78'
                    },
                    # Create a new A record with a different value
                    {
                        action => 'create',
                        name => 'www.example.com.',
                        type => 'A',
                        ttl => 86400,
                        value => '34.56.78.90'
                    },
                    # Create two new MX records
                    {
                        action => 'create',
                        name => 'example.com.',
                        type => 'MX',
                        ttl => 86400,
                        records => [
                            '10 mail.example.com',
                            '20 mail2.example.com'
                        ]
                    }
                ]);

    If there is just one change to be made, you can use the simplified call
    syntax, and pass the change parameters immediately, instead of using the
    "changes" parameter:

        $change_info = $r53->change_resource_record_sets(zone_id => '123ZONEID',
                                                         action => 'delete',
                                                         name => 'www.example.com.',
                                                         type => 'A',
                                                         ttl => 86400,
                                                         value => '12.34.56.78');

    Parameters:

    *   zone_id

        (Required) Hosted zone ID.

    *   changes

        (Required) A reference to an array of hashes, describing the changes
        to be made. If there is just one change, it may be omitted and ...

    Change parameters:

    *   action

        The action to perform ("create" or "delete").

    *   name

        The name of the domain to perform the action on.

    *   type

        The DNS record type.

    *   ttl

        The DNS record time to live (TTL), in seconds.

    *   records

        An array of strings that represent the current or new record values.
        If there is just one value, you can use the "value" parameter
        instead.

    *   value

        Current or new DNS record value. For multiple record values, use the
        "records" parameter.

    Returns: A reference to a hash containing change information. Example:

        $change_info = {
            'id' => '/change/123CHANGEID'
            'submitted_at' => '2011-08-31T00:04:37.456Z',
            'status' => 'PENDING'
        };

  error
    Returns the last error.

        $error = $r53->error;

    Returns: A reference to a hash containing the type, code, and message of
    the last error. Example:

        $error = {
            'type' => 'Sender',
            'message' => 'FATAL problem: UnsupportedCharacter encountered at  ',
            'code' => 'InvalidDomainName'
        };

AUTHOR
    Michal Wojciechowski, "<odyniec at cpan.org>"

BUGS
    Please report any bugs or feature requests to
    "bug-webservice-amazon-route53 at rt.cpan.org", or through the web
    interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WebService-Amazon-Route5
    3>. I will be notified, and then you'll automatically be notified of
    progress on your bug as I make changes.

SUPPORT
    You can find documentation for this module with the perldoc command.

        perldoc WebService::Amazon::Route53

    You can also look for information at:

    *   RT: CPAN's request tracker

        <http://rt.cpan.org/NoAuth/Bugs.html?Dist=WebService-Amazon-Route53>

    *   AnnoCPAN: Annotated CPAN documentation

        <http://annocpan.org/dist/WebService-Amazon-Route53>

    *   CPAN Ratings

        <http://cpanratings.perl.org/d/WebService-Amazon-Route53>

    *   Search CPAN

        <http://search.cpan.org/dist/WebService-Amazon-Route53/>

SEE ALSO
    *   Amazon Route 53 API Reference

        <http://docs.amazonwebservices.com/Route53/latest/APIReference/>

ACKNOWLEDGEMENTS
LICENSE AND COPYRIGHT
    Copyright 2011 Michal Wojciechowski.

    This program is free software; you can redistribute it and/or modify it
    under the terms of either: the GNU General Public License as published
    by the Free Software Foundation; or the Artistic License.

    See http://dev.perl.org/licenses/ for more information.

