#!/usr/bin/env python3 import json from urllib.request import urlopen, Request import argparse from datetime import datetime from subprocess import check_call def run(): parser = argparse.ArgumentParser() parser.add_argument('-z', "--hosted-zone", metavar='HOSTED_ZONE_ID', required=True, help="Specify the hosted zone id") parser.add_argument('-d', "--domain", metavar='DOMAIN_NAME', required=True, help="Specify domain name") parser.add_argument('-t', "--type", metavar='DNS_TYPE', default='A', help="Specify DNS type") parser.add_argument('-l', "--ttl", metavar='TTL_S', type=int, default=300, help="Specify time-to-live in seconds") args = parser.parse_args() url = "http://v4.ipv6-test.com/api/myip.php" request = Request(url) with urlopen(request) as request: public_ip = request.read().decode() date = datetime.now().strftime('%Y-%m-%d %H:%M:%S') params = { 'Comment': f'Auto update by awsdyndns on {date}', 'Changes': [ { 'Action': 'UPSERT', 'ResourceRecordSet': { 'ResourceRecords': [{'Value': public_ip}], 'Name': args.domain, 'Type': args.type, 'TTL': args.ttl } } ] } check_call(['aws', 'route53', 'change-resource-record-sets', '--hosted-zone-id', args.hosted_zone, '--change-batch', json.dumps(params)]) if __name__ == "__main__": run()