Sign in
agent:

Route53 Management

There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
  1. 1

    Change TTL(Time To Live) value of Route53 DNS Records

    There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.

    This runbook updates the Time-to-Live (TTL) value for specified DNS records in AWS Route 53. Increasing the TTL can reduce the frequency of DNS lookups, thereby potentially improving DNS resolution time and reducing costs. However, a longer TTL may also mean slower propagation of changes.

    1
    1. 1.1

      Get DNS Records with TTL under given time duration

      There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.

      This task fetches DNS records in AWS Route 53 with a TTL value less than a specified number of hours. Identifying records with low TTL can help in optimizing DNS query costs and performance. A lower TTL means more frequent DNS queries, which could lead to higher costs and increased load on the DNS servers.

      import boto3 from botocore.exceptions import ClientError creds = _get_creds(cred_label)['creds'] access_key = creds['username'] secret_key = creds['password'] def get_ttl_under_threshold(threshold): """ Retrieve DNS records with a TTL under the specified threshold. Args: threshold (int): TTL threshold in seconds. Returns: list: List of records with TTL under the threshold. """ # Initialize a list to store records with low TTL lower_ttl_records = [] try: # Create a Route53 client client = boto3.client('route53',aws_access_key_id=access_key,aws_secret_access_key=secret_key) # Get all hosted zones hosted_zones = client.list_hosted_zones()['HostedZones'] # Loop through each hosted zone for zone in hosted_zones: zone_id = zone['Id'] # Use pagination to get all resource record sets for this hosted zone paginator = client.get_paginator('list_resource_record_sets') # Loop through pages of resource record sets for page in paginator.paginate(HostedZoneId=zone_id): # Loop through each record set on this page for record_set in page['ResourceRecordSets']: # Check if the record set has a TTL and if it's under the threshold if 'TTL' in record_set and record_set['TTL'] < threshold: record_data = { 'HostedZoneId': zone_id, 'RecordName': record_set['Name'], 'RecordType': record_set['Type'], 'TTL': record_set['TTL'] } # Append the record data to our list lower_ttl_records.append(record_data) # Handle specific boto3 client errors except ClientError as ce: print(f"ClientError: {ce}") # Handle all other exceptions except Exception as e: print(f"Unexpected error: {e}") # Return the list of records with TTL under the threshold return lower_ttl_records # Define the TTL threshold in seconds (1 hour = 3600 seconds) #threshold_value = 3600 # Get and store records with TTL under the threshold records = get_ttl_under_threshold(threshold_value_secs) # Display the records if records: print("Records with TTL under the threshold:") for record in records: print(record) else: print("No records found with TTL under the threshold.") context.proceed = False
      copied
      1.1
    2. 1.2

      Change TTL value of AWS Route 53 DNS records

      There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.

      This task modifies the Time-to-Live (TTL) value for a specific DNS record in AWS Route 53.

      import boto3 from botocore.exceptions import ClientError creds = _get_creds(cred_label)['creds'] access_key = creds['username'] secret_key = creds['password'] def change_ttl(record_data_list, new_ttl): """ Change the TTL value of multiple DNS records in AWS Route 53. Args: record_data_list (list): List of dictionaries, each containing hosted_zone_id, record_name, and record_type. new_ttl (int): The new TTL value in seconds. Returns: None """ # Initialize the Route 53 client client = boto3.client('route53',aws_access_key_id=access_key,aws_secret_access_key=secret_key) for record_data in record_data_list: try: # Extract the necessary data from each record_data dictionary hosted_zone_id = record_data['HostedZoneId'] record_name = record_data['RecordName'] record_type = record_data['RecordType'] # Fetch the existing resource records for each DNS entry response = client.list_resource_record_sets( HostedZoneId=hosted_zone_id, StartRecordName=record_name, StartRecordType=record_type, MaxItems='1' ) # Locate the existing DNS record current_record_set = next((record for record in response['ResourceRecordSets'] if record['Name'] == record_name and record['Type'] == record_type), None) # Validate if the DNS record exists if current_record_set is None: print(f"DNS record not found for {record_name}. Skipping.") continue # Prepare the change batch for modifying the DNS record change_batch = { 'Changes': [{ 'Action': 'UPSERT', 'ResourceRecordSet': { 'Name': record_name, 'Type': record_type, 'TTL': new_ttl, 'ResourceRecords': current_record_set['ResourceRecords'] # Use existing ResourceRecords } }] } # Execute the change in Route 53 client.change_resource_record_sets( HostedZoneId=hosted_zone_id, ChangeBatch=change_batch ) print(f"Successfully changed TTL for {record_name}") except ClientError as ce: print(f"ClientError for {record_name}: {ce}") except Exception as e: print(f"Unexpected error for {record_name}: {e}") ''' # Example record data # Replace with your specific details record_data_list = [ {'HostedZoneId': '/hostedzone/XXXXXXXX', 'RecordName': 'example.com.', 'RecordType': 'A', 'TTL': 300}, {'HostedZoneId': '/hostedzone/XXXXXXXX', 'RecordName': 'example.com.', 'RecordType': 'SOA', 'TTL': 900} ] ''' #new_ttl = 86400 # 1 day in seconds (86400) if records: # Function call to change TTL for multiple records change_ttl(records, int(new_ttl_secs)) else: print("No records were passed.")
      copied
      1.2