Repository: AnalogJ/lexicon

Issue:
route53 provider and tests
AWS Route 53 provider for lexicon

Notes:
- haven't (yet?) added any command line args for auth - I always use env vars or credentials files, and the provider uses boto under the hood, so follows the same [credential lookup approach](http://boto3.readthedocs.io/en/latest/guide/configuration.html). Maybe we should have `--aws-access-key-id` etc, interested in other thoughts.
- skipped one of the tests since AWS record sets don't have IDs
- to create the vcr cassettes, I ran the tests using my own domain & AWS keys, and then did search & replace in the cassette files for the domain
- if one deletes the hosted zone (domain equivalent) in Route 53 within 12 hours, there's no charge, enabling free testing (in theory)



Discussion:

Resolving patch:
diff --git a/lexicon/providers/route53.py b/lexicon/providers/route53.py
new file mode 100644
--- /dev/null
+++ b/lexicon/providers/route53.py
@@ -0,0 +1,165 @@
+"""Provide support to Lexicon for AWS Route 53 DNS changes."""
+from base import Provider as BaseProvider
+import boto3
+import botocore
+
+
+def ProviderParser(subparser):
+    """Specify arguments for AWS Route 53 Lexicon Provider."""
+    subparser.add_argument("--auth-access-key", help="specify ACCESS_KEY used to authenticate")
+    subparser.add_argument("--auth-access-secret", help="specify ACCESS_SECRET used authenticate")
+
+    #TODO: these are only required for testing, we should figure out a way to remove them & update the integration tests
+    # to dynamically populate the auth credentials that are required.
+    subparser.add_argument("--auth-username", help="alternative way to specify ACCESS_KEY used to authenticate")
+    subparser.add_argument("--auth-token", help="alternative way to specify ACCESS_SECRET used authenticate")
+
+
+class RecordSetPaginator(object):
+    """Paginate through complete list of record sets."""
+
+    def __init__(self, r53_client, hosted_zone_id, max_items=None):
+        """Initialize paginator."""
+        self.r53_client = r53_client
+        self.hosted_zone_id = hosted_zone_id
+        self.max_items = max_items
+
+    def get_record_sets(self, **kwargs):
+        """Retrieve a page from API."""
+        return self.r53_client.list_resource_record_sets(**kwargs)
+
+    def get_base_kwargs(self):
+        """Get base kwargs for API call."""
+        kwargs = {
+            'HostedZoneId': self.hosted_zone_id
+        }
+        if self.max_items is not None:
+            kwargs.update({
+                'MaxItems': str(self.max_items)
+            })
+        return kwargs
+
+    def all_record_sets(self):
+        """Generator to loop through current record set.
+
+        Call next page if it exists.
+        """
+        is_truncated = True
+        start_record_name = None
+        start_record_type = None
+        kwargs = self.get_base_kwargs()
+        while is_truncated:
+            if start_record_name is not None:
+                kwargs.update({
+                    'StartRecordName': start_record_name,
+                    'StartRecordType': start_record_type
+                })
+            result = self.get_record_sets(**kwargs)
+            for record_set in result.get('ResourceRecordSets', []):
+                yield record_set
+
+            is_truncated = result.get('IsTruncated', False)
+
+            start_record_name = result.get('NextRecordName', None)
+            start_record_type = result.get('NextRecordType', None)
+
+
+class Provider(BaseProvider):
+    """Provide AWS Route 53 implementation of Lexicon Provider interface."""
+
+    def __init__(self, options, provider_options={}):
+        """Initialize AWS Route 53 DNS provider."""
+        super(Provider, self).__init__(options)
+        self.domain_id = None
+        # instantiate the client
+        self.r53_client = boto3.client(
+            'route53',
+            aws_access_key_id=self.options.get('auth_access_key', self.options.get('auth_username')),
+            aws_secret_access_key=self.options.get('auth_access_secret', self.options.get('auth_token'))
+        )
+
+    def authenticate(self):
+        """Determine the hosted zone id for the domain."""
+        try:
+            hosted_zones = self.r53_client.list_hosted_zones_by_name()[
+                'HostedZones'
+            ]
+            hosted_zone = next(
+                hz for hz in hosted_zones
+                if hz['Name'] == '{}.'.format(self.options['domain'])
+            )
+            self.domain_id = hosted_zone['Id']
+        except StopIteration:
+            raise StandardError('No domain found')
+
+    def _change_record_sets(self, action, type, name, content):
+        ttl = self.options.get('ttl')
+        value = '"{}"'.format(content) if type in ['TXT', 'SPF'] else content
+        try:
+            self.r53_client.change_resource_record_sets(
+                HostedZoneId=self.domain_id,
+                ChangeBatch={
+                    'Comment': '{} using lexicon Route 53 provider'.format(
+                        action
+                    ),
+                    'Changes': [
+                        {
+                            'Action': action,
+                            'ResourceRecordSet': {
+                                'Name': self._fqdn_name(name),
+                                'Type': type,
+                                'TTL': ttl if ttl is not None else 300,
+                                'ResourceRecords': [
+                                    {
+                                        'Value': value
+                                    }
+                                ]
+                            }
+                        }
+                    ]
+                }
+            )
+            return True
+        except botocore.exceptions.ClientError as e:
+            print e.message
+
+    def create_record(self, type, name, content):
+        """Create a record in the hosted zone."""
+        return self._change_record_sets('CREATE', type, name, content)
+
+    def update_record(self, identifier=None, type=None, name=None, content=None):
+        """Update a record from the hosted zone."""
+        return self._change_record_sets('UPSERT', type, name, content)
+
+    def delete_record(self, identifier=None, type=None, name=None, content=None):
+        """Delete a record from the hosted zone."""
+        return self._change_record_sets('DELETE', type, name, content)
+
+    def _format_content(self, type, content):
+        return content[1:-1] if type in ['TXT', 'SPF'] else content
+
+    def list_records(self, type=None, name=None, content=None):
+        """List all records for the hosted zone."""
+        records = []
+        paginator = RecordSetPaginator(self.r53_client, self.domain_id)
+        for record in paginator.all_record_sets():
+            if type is not None and record['Type'] != type:
+                continue
+            if name is not None and record['Name'] != self._fqdn_name(name):
+                continue
+            if record.get('AliasTarget', None) is not None:
+                record_content = [record['AliasTarget'].get('DNSName', None)]
+            if record.get('ResourceRecords', None) is not None:
+                record_content = [self._format_content(record['Type'], value['Value']) for value
+                                  in record['ResourceRecords']]
+            if content is not None and content not in record_content:
+                continue
+            print record
+            records.append({
+                'type': record['Type'],
+                'name': self._full_name(record['Name']),
+                'ttl': record.get('TTL', None),
+                'content': record_content[0] if len(record_content) == 1 else record_content,
+            })
+        print 'list_records: {0}'.format(records)
+        return records
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -97,11 +97,16 @@
     # https://packaging.python.org/en/latest/requirements.html
     install_requires=['requests', 'tldextract'],
 
+    extras_require={
+        'route53': ['boto3'],
+        'transip': ['transip']
+    },
+
     # Although 'package_data' is the preferred approach, in some case you may
     # need to place data files outside of your packages. See:
     # http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files # noqa
     # In this case, 'data_file' will be installed into '<sys.prefix>/my_data'
-    #data_files=[('my_data', ['data/data_file'])],
+    # data_files=[('my_data', ['data/data_file'])],
 
     # To provide executable scripts, use entry points in preference to the
     # "scripts" keyword. Entry points provide cross-platform support and allow
@@ -112,8 +117,5 @@
         ],
     },
 
-    extras_require={
-        'transip': ['transip']
-    },
     test_suite='tests'
 )


Test patch:
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_authenticate.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_authenticate.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_authenticate.yaml
@@ -0,0 +1,19 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013235Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>2</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:36 GMT']
+      x-amzn-requestid: [4259fe5f-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml
@@ -0,0 +1,19 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013235Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>2</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:36 GMT']
+      x-amzn-requestid: [429dbe58-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml
@@ -0,0 +1,39 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013236Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>2</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:37 GMT']
+      x-amzn-requestid: [42de70cb-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>A</Type><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords><Name>localhost.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['460']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013236Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/CF17IG5J1X5M7</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:37.919Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['332']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:37 GMT']
+      x-amzn-requestid: [42f1f8dc-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml
@@ -0,0 +1,39 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013237Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>3</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:37 GMT']
+      x-amzn-requestid: [434a0361-8dc0-11e6-a762-87e4489e0720]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>CNAME</Type><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords><Name>docs.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['466']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013237Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/CNVXEL21DSSE9</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:38.501Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['332']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:37 GMT']
+      x-amzn-requestid: [435c79fb-8dc0-11e6-a762-87e4489e0720]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml
@@ -0,0 +1,39 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013237Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>4</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:38 GMT']
+      x-amzn-requestid: [43a0d637-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>_acme-challenge.fqdn.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['480']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013238Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C1A3B8VBTCYYOV</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:39.081Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:38 GMT']
+      x-amzn-requestid: [43b45e42-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml
@@ -0,0 +1,39 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013238Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>5</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:39 GMT']
+      x-amzn-requestid: [43fa197e-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>_acme-challenge.full.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['480']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013238Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C3QZFMKIVEW05N</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:39.667Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:39 GMT']
+      x-amzn-requestid: [440d0546-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml
@@ -0,0 +1,39 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013238Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>6</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:39 GMT']
+      x-amzn-requestid: [44529985-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>_acme-challenge.test.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['480']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013239Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C3BNEPBUUIXTZQ</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:40.246Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:39 GMT']
+      x-amzn-requestid: [4465ac59-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml
@@ -0,0 +1,77 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013239Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>7</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:39 GMT']
+      x-amzn-requestid: [44b293e4-8dc0-11e6-9eaf-799ea20c9a03]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>delete.testfilt.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013239Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C1LD422CD1FFW7</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:40.921Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:40 GMT']
+      x-amzn-requestid: [44cd47e2-8dc0-11e6-9eaf-799ea20c9a03]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>DELETE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>delete.testfilt.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>DELETE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013240Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C16141CWLG6YKW</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:41.073Z</SubmittedAt><Comment>DELETE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:40 GMT']
+      x-amzn-requestid: [44e4a07f-8dc0-11e6-9eaf-799ea20c9a03]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013240Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['1982']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:40 GMT']
+      x-amzn-requestid: [44fa2459-8dc0-11e6-9eaf-799ea20c9a03]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml
@@ -0,0 +1,77 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013240Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>7</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:41 GMT']
+      x-amzn-requestid: [453cf9fb-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>delete.testfqdn.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013240Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C32D281ZMBH6IN</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:41.807Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:41 GMT']
+      x-amzn-requestid: [4552cbee-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>DELETE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>delete.testfqdn.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>DELETE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013240Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C3VF6FG1FFV88I</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:41.955Z</SubmittedAt><Comment>DELETE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:41 GMT']
+      x-amzn-requestid: [456a99bc-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013241Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['1982']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:42 GMT']
+      x-amzn-requestid: [45846352-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml
@@ -0,0 +1,77 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013241Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>7</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:42 GMT']
+      x-amzn-requestid: [45c7d4b2-8dc0-11e6-8007-f92dc2d345fb]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>delete.testfull.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013241Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/CE0NHMZGUPDL5</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:42.698Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['332']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:42 GMT']
+      x-amzn-requestid: [45dbf8f4-8dc0-11e6-8007-f92dc2d345fb]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>DELETE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>delete.testfull.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>DELETE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013241Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/CUT13HX23V72I</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:42.847Z</SubmittedAt><Comment>DELETE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['332']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:42 GMT']
+      x-amzn-requestid: [45f2dc6d-8dc0-11e6-8007-f92dc2d345fb]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013242Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['1982']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:42 GMT']
+      x-amzn-requestid: [4609bfde-8dc0-11e6-8007-f92dc2d345fb]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml
@@ -0,0 +1,58 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013242Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>7</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:43 GMT']
+      x-amzn-requestid: [464edf4f-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"ttlshouldbe3600"</Value></ResourceRecord></ResourceRecords><Name>ttl.fqdn.capsulecd.com.</Name><TTL>3600</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['470']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013242Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C286G3OOGBO9GJ</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:43.674Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:43 GMT']
+      x-amzn-requestid: [466ffbf5-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013242Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['2198']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:43 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [4686df62-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml
@@ -0,0 +1,58 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013243Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>8</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:44 GMT']
+      x-amzn-requestid: [46cac616-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>random.fqdntest.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013243Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C2GOCRSU4ITV0W</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:44.391Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:44 GMT']
+      x-amzn-requestid: [46dec357-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013243Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fqdntest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['2419']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:44 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [46f46e44-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml
@@ -0,0 +1,58 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013243Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>9</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['735']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:44 GMT']
+      x-amzn-requestid: [47398d22-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>random.fulltest.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['475']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013244Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/CVEXQI7H7RA91</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:45.125Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['332']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:44 GMT']
+      x-amzn-requestid: [474d8a5c-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013244Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fqdntest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fulltest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['2640']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:44 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [47650a0f-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml
@@ -0,0 +1,58 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013244Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>10</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['736']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:45 GMT']
+      x-amzn-requestid: [47a917cb-8dc0-11e6-ae6d-ef4282e2655b]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>random.test.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['471']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013244Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C24TSLQ5UO80NL</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:45.851Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:45 GMT']
+      x-amzn-requestid: [47bcc6e7-8dc0-11e6-ae6d-ef4282e2655b]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013245Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fqdntest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fulltest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['2857']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:45 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [47d3f877-8dc0-11e6-ae6d-ef4282e2655b]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml
@@ -0,0 +1,38 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013245Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>11</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['736']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:45 GMT']
+      x-amzn-requestid: [4817b8cb-8dc0-11e6-8007-f92dc2d345fb]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013245Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fqdntest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fulltest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['2857']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:45 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [482b66ee-8dc0-11e6-8007-f92dc2d345fb]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml
@@ -0,0 +1,78 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013245Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>11</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['736']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:46 GMT']
+      x-amzn-requestid: [486effe1-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>orig.test.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['469']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013246Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C3ML8LEYPAH42J</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:47.135Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:46 GMT']
+      x-amzn-requestid: [48817676-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013246Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fqdntest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fulltest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>orig.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['3072']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:46 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [4896ac31-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>UPSERT
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>updated.test.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>UPSERT</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['472']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013246Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C1ZNAFHKUJL8FG</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:47.403Z</SubmittedAt><Comment>UPSERT
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:46 GMT']
+      x-amzn-requestid: [48aaf78d-8dc0-11e6-b80f-fd822a08c6c3]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml
@@ -0,0 +1,78 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013246Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>13</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['736']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:47 GMT']
+      x-amzn-requestid: [48ee8fff-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>orig.testfqdn.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['473']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013247Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C14BHL8X9QA0BQ</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:48.023Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:47 GMT']
+      x-amzn-requestid: [4907964e-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013247Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fqdntest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fulltest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>orig.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>updated.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>orig.testfqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['3509']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:47 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [491f3d07-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>UPSERT
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>updated.testfqdn.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>UPSERT</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['476']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013247Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C3V55RIBBU2CM3</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:48.311Z</SubmittedAt><Comment>UPSERT
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:48 GMT']
+      x-amzn-requestid: [493472c9-8dc0-11e6-ad4e-4db3db61d6c6]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/cassettes/route53/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml
@@ -0,0 +1,78 @@
+interactions:
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013247Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzonesbyname
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListHostedZonesByNameResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZones><HostedZone><Id>/hostedzone/ZBEJSHF5L79VI</Id><Name>capsulecd.com.</Name><CallerReference>CD167CD7-84D9-E9B6-A9CA-368CF9590C4F</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>15</ResourceRecordSetCount></HostedZone><HostedZone><Id>/hostedzone/Z26VK10YTMHFYG</Id><Name>eadmundo.com.</Name><CallerReference>D3154B90-A6B5-C702-9EC1-F2C63DCCF274</CallerReference><Config><PrivateZone>false</PrivateZone></Config><ResourceRecordSetCount>17</ResourceRecordSetCount></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesByNameResponse>'}
+    headers:
+      content-length: ['736']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:48 GMT']
+      x-amzn-requestid: [497af165-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>CREATE
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>orig.testfull.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>CREATE</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['473']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013247Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/CT324RA3S2BTA</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:48.906Z</SubmittedAt><Comment>CREATE
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['332']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:48 GMT']
+      x-amzn-requestid: [498f63d5-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers:
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013248Z]
+    method: !!python/unicode GET
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ResourceRecordSets><ResourceRecordSet><Name>capsulecd.com.</Name><Type>NS</Type><TTL>172800</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.</Value></ResourceRecord><ResourceRecord><Value>ns-581.awsdns-08.net.</Value></ResourceRecord><ResourceRecord><Value>ns-1197.awsdns-21.org.</Value></ResourceRecord><ResourceRecord><Value>ns-1858.awsdns-40.co.uk.</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>capsulecd.com.</Name><Type>SOA</Type><TTL>900</TTL><ResourceRecords><ResourceRecord><Value>ns-157.awsdns-19.com.
+        awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>docs.capsulecd.com.</Name><Type>CNAME</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>docs.example.com</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>ttl.fqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>3600</TTL><ResourceRecords><ResourceRecord><Value>&quot;ttlshouldbe3600&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fqdntest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.full.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.fulltest.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>localhost.capsulecd.com.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>127.0.0.1</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>_acme-challenge.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>orig.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>random.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>updated.test.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>orig.testfqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>updated.testfqdn.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet><ResourceRecordSet><Name>orig.testfull.capsulecd.com.</Name><Type>TXT</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>&quot;challengetoken&quot;</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['3950']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:48 GMT']
+      vary: [Accept-Encoding]
+      x-amzn-requestid: [49a62033-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+- request:
+    body: !!python/unicode <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeBatch><Comment>UPSERT
+      using lexicon Route 53 provider</Comment><Changes><Change><ResourceRecordSet><Type>TXT</Type><ResourceRecords><ResourceRecord><Value>"challengetoken"</Value></ResourceRecord></ResourceRecords><Name>updated.testfull.capsulecd.com.</Name><TTL>300</TTL></ResourceRecordSet><Action>UPSERT</Action></Change></Changes></ChangeBatch></ChangeResourceRecordSetsRequest>
+    headers:
+      Content-Length: ['476']
+      User-Agent: [Boto3/1.4.1 Python/2.7.11 Darwin/15.6.0 Botocore/1.4.60]
+      X-Amz-Date: [20161009T013248Z]
+    method: !!python/unicode POST
+    uri: https://route53.amazonaws.com/2013-04-01/hostedzone/ZBEJSHF5L79VI/rrset/
+  response:
+    body: {string: !!python/unicode '<?xml version="1.0"?>
+
+        <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/C1SXJPGKTS19GL</Id><Status>PENDING</Status><SubmittedAt>2016-10-09T01:32:49.191Z</SubmittedAt><Comment>UPSERT
+        using lexicon Route 53 provider</Comment></ChangeInfo></ChangeResourceRecordSetsResponse>'}
+    headers:
+      content-length: ['333']
+      content-type: [text/xml]
+      date: ['Sun, 09 Oct 2016 01:32:49 GMT']
+      x-amzn-requestid: [49bb7cf9-8dc0-11e6-86bb-25110d14e1d9]
+    status: {code: 200, message: OK}
+version: 1
diff --git a/tests/providers/integration_tests.py b/tests/providers/integration_tests.py
--- a/tests/providers/integration_tests.py
+++ b/tests/providers/integration_tests.py
@@ -209,7 +209,7 @@ def test_Provider_when_calling_update_record_should_modify_record(self):
             provider.authenticate()
             assert provider.create_record('TXT','orig.test','challengetoken')
             records = provider.list_records('TXT','orig.test')
-            assert provider.update_record(records[0]['id'],'TXT','updated.test','challengetoken')
+            assert provider.update_record(records[0].get('id', None),'TXT','updated.test','challengetoken')
 
     def test_Provider_when_calling_update_record_with_full_name_should_modify_record(self):
         with provider_vcr.use_cassette(self._cassette_path('IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml'), filter_headers=self._filter_headers(), filter_query_parameters=self._filter_query_parameters(), filter_post_data_parameters=self._filter_post_data_parameters()):
@@ -221,7 +221,7 @@ def test_Provider_when_calling_update_record_with_full_name_should_modify_record
             provider.authenticate()
             assert provider.create_record('TXT','orig.testfull.{0}'.format(self.domain),'challengetoken')
             records = provider.list_records('TXT','orig.testfull.{0}'.format(self.domain))
-            assert provider.update_record(records[0]['id'],'TXT','updated.testfull.{0}'.format(self.domain),'challengetoken')
+            assert provider.update_record(records[0].get('id', None),'TXT','updated.testfull.{0}'.format(self.domain),'challengetoken')
 
     def test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record(self):
         with provider_vcr.use_cassette(self._cassette_path('IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml'), filter_headers=self._filter_headers(), filter_query_parameters=self._filter_query_parameters(), filter_post_data_parameters=self._filter_post_data_parameters()):
@@ -233,7 +233,7 @@ def test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record
             provider.authenticate()
             assert provider.create_record('TXT','orig.testfqdn.{0}.'.format(self.domain),'challengetoken')
             records = provider.list_records('TXT','orig.testfqdn.{0}.'.format(self.domain))
-            assert provider.update_record(records[0]['id'],'TXT','updated.testfqdn.{0}.'.format(self.domain),'challengetoken')
+            assert provider.update_record(records[0].get('id', None),'TXT','updated.testfqdn.{0}.'.format(self.domain),'challengetoken')
 
     ###########################################################################
     # Provider.delete_record()
diff --git a/tests/providers/test_route53.py b/tests/providers/test_route53.py
new file mode 100644
--- /dev/null
+++ b/tests/providers/test_route53.py
@@ -0,0 +1,21 @@
+"""Test for route53 implementation of the interface."""
+import unittest
+import pytest
+from lexicon.providers.route53 import Provider
+from integration_tests import IntegrationTests
+
+
+class Route53ProviderTests(unittest.TestCase, IntegrationTests):
+    """Route53 Proivder Tests."""
+
+    Provider = Provider
+    provider_name = 'route53'
+    domain = 'capsulecd.com'
+
+    def _filter_headers(self):
+        """Sensitive headers to be filtered."""
+        return ['Authorization']
+
+    @pytest.mark.skip(reason="route 53 dns records don't have ids")
+    def test_Provider_when_calling_delete_record_by_identifier_should_remove_record(self):
+        return