Migre DNS registros de forma masiva a una zona alojada privada de Amazon Route 53 - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Migre DNS registros de forma masiva a una zona alojada privada de Amazon Route 53

Creado por Ram Kandaswamy () AWS

Entorno: producción

Tecnologías: redes; infraestructura CloudNative DevOps

AWSservicios: AWS Cloud9; Amazon Route 53; Amazon S3

Resumen

Los ingenieros de redes y los administradores de la nube necesitan una forma eficaz y sencilla de añadir registros del Sistema de nombres de dominio (Domain Name SystemDNS) a las zonas alojadas privadas en Amazon Route 53. El uso de un enfoque manual para copiar las entradas de una hoja de cálculo de Microsoft Excel a las ubicaciones adecuadas de la consola de Route 53 es tedioso y propenso a errores. Este patrón describe un enfoque automatizado que reduce el tiempo y el esfuerzo necesarios para añadir varios registros. También proporciona un conjunto de pasos repetibles para la creación de varias zonas alojadas.

Este patrón utiliza el entorno de desarrollo integrado AWS Cloud9 (IDE) para el desarrollo y las pruebas, y Amazon Simple Storage Service (Amazon S3) para almacenar registros. Para trabajar con los datos de manera eficiente, el patrón usa el JSON formato debido a su simplicidad y su capacidad para admitir un diccionario de Python (tipo de dict datos).

Nota: Si puede generar un archivo de zona desde su sistema, considere utilizar la característica de importación de Route 53 en su lugar.

Requisitos previos y limitaciones

Requisitos previos 

  • Una hoja de cálculo de Excel que contiene registros de zonas alojadas privadas

  • Familiaridad con distintos tipos de DNS registros, como el registro A, el registro Name Authority Pointer (NAPTR) y el SRV registro (consulte Tipos de DNS registros admitidos)

  • Familiaridad con el lenguaje Python y sus bibliotecas

Limitaciones

  • El patrón no proporciona una cobertura amplia para todos los escenarios de casos de uso. Por ejemplo, la llamada change_resource_record_sets no utiliza todas las propiedades disponibles del. API

  • En la hoja de cálculo de Excel, se supone que el valor de cada fila es único. Se espera que aparezcan varios valores para cada nombre de dominio completo (FQDN) en la misma fila. Si eso no es cierto, debe modificar el código proporcionado en este patrón para realizar la concatenación necesaria.

  • El patrón usa Python (Boto3) AWS SDK para llamar directamente al servicio Route 53. Puede mejorar el código para usar un AWS CloudFormation contenedor para los update_stack comandos create_stack y, además, usar los JSON valores para rellenar los recursos de la plantilla.

Arquitectura

Pila de tecnología

  • Zonas alojadas privadas de Route 53 para enrutar el tráfico

  • AWSCloud9 IDE para desarrollo y pruebas

  • Amazon S3 para almacenar el JSON archivo de salida

Flujo de trabajo para migrar DNS registros de forma masiva a una zona alojada privada de Route 53.

El flujo de trabajo consta de los siguientes pasos, tal como se ilustra en el diagrama anterior y se describe en la sección Epics:

  1. Cargue una hoja de cálculo de Excel que contenga la información del conjunto de registros en un bucket de S3.

  2. Cree y ejecute un script de Python que convierta los datos de Excel en JSON formato.

  3. Lea los registros del bucket de S3 y limpie los datos.

  4. Cree conjuntos de registros en su zona alojada privada.

Herramientas

  • Route 53: Amazon Route 53 es un servicio DNS web escalable y de alta disponibilidad que gestiona el registro de dominios, el DNS enrutamiento y la comprobación del estado.

  • AWSCloud9: AWS Cloud9 ofrece una IDE rica experiencia de edición de código con soporte para varios lenguajes de programación y depuradores de tiempo de ejecución, y un terminal incorporado. Contiene una colección de herramientas que se utilizan para codificar, compilar, ejecutar, probar y depurar software, y le ayuda a lanzar software en la nube.

  • Amazon S3: Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos. Puede utilizar Amazon S3 para almacenar y recuperar cualquier cantidad de datos en cualquier momento y desde cualquier parte de la web.

Epics

TareaDescripciónHabilidades requeridas

Cree un archivo de Excel para sus registros.

Utilice los registros que ha exportado de su sistema actual para crear una hoja de cálculo de Excel que contenga las columnas necesarias para un registro, como el nombre de dominio completo (FQDN), el tipo de registro, el tiempo de vida (TTL) y el valor. Para SRV los registros NAPTR y, el valor es una combinación de varias propiedades, así que utilice el concat método de Excel para combinar estas propiedades.

FqdnName

RecordType

Valor

TTL

something.example.org

A

1.1.1.1

900

Ingeniero de datos, con conocimientos de Excel

Verifique el entorno de trabajo.

En AWS Cloud9IDE, cree un archivo Python para convertir la hoja de trabajo de entrada de Excel en formato. JSON (En lugar de AWS Cloud9, también puedes usar un SageMaker bloc de notas de Amazon para trabajar con código Python).

Compruebe que la versión de Python que está utilizando sea la 3.7 o posterior.

python3 --version

Instale el paquete pandas.

pip3 install pandas --user
¿General AWS

Convierta los datos de la hoja de cálculo de Excel enJSON.

Cree un archivo Python que contenga el siguiente código para convertirlo de Excel aJSON.

import pandas as pd data=pd.read_excel('./Book1.xls') data.to_json(path_or_buf='my.json',orient='records')

donde Book1 es el nombre de la hoja de cálculo de Excel y my.json el nombre del JSON archivo de salida.

Ingeniero de datos, con conocimientos de Python

Cargue el JSON archivo en un bucket de S3.

Cargue el archivo my.json en un bucket de S3. Para obtener más información, consulte Creación de un bucket en la documentación de Amazon S3.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Crear una zona alojada privada.

Usa create_hosted_zone API y el siguiente código de ejemplo de Python para crear una zona alojada privada. Sustituya los parámetros hostedZoneName, vpcRegion y vpcId por sus propios valores.

import boto3 import random hostedZoneName ="xxx" vpcRegion = "us-east-1" vpcId="vpc-xxxx" route53_client = boto3.client('route53') response = route53_client.create_hosted_zone( Name= hostedZoneName, VPC={ 'VPCRegion: vpcRegion, 'VPCId': vpcId }, CallerReference=str(random.random()*100000), HostedZoneConfig={ 'Comment': "private hosted zone created by automation", 'PrivateZone': True } ) print(response)

También puedes usar una herramienta de infraestructura como código (IaC), por ejemplo, AWS CloudFormation para reemplazar estos pasos por una plantilla que cree una pila con los recursos y propiedades adecuados.

Ingeniero en la nube, administrador de redes, con habilidades de Python

Recupere detalles en formato de diccionario de Amazon S3.

Usa el siguiente código para leer el bucket de S3 y obtener los JSON valores como un diccionario de Python. 

fileobj = s3_client.get_object( Bucket=bucket_name, Key='my.json' ) filedata = fileobj['Body'].read() contents = filedata.decode('utf-8') json_content=json.loads(contents) print(json_content)

donde json_content contiene el diccionario de Python.

Desarrollador de aplicaciones, con conocimientos de Python

Limpie los valores de datos para los espacios y caracteres Unicode.

Como medida de seguridad para garantizar la exactitud de los datos, utilice el siguiente código para realizar una operación de extracción de los valores incluidos en json_content. Este código elimina los caracteres de espacio al principio y al final de cada cadena. También utiliza el método replace para eliminar los espacios duros (que no se rompan) (los caracteres \xa0).

for item in json_content: fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip()) rec_type = item["RecordType"].replace('\xa0', '').strip() res_rec = { 'Value': item["Value"].replace('\xa0', '').strip() }
Desarrollador de aplicaciones, con conocimientos de Python

Insertar registros.

Use el siguiente código como parte del bucle for anterior.

change_response = route53_client.change_resource_record_sets( HostedZoneId="xxxxxxxx", ChangeBatch={ 'Comment': 'Created by automation', 'Changes': [ { 'Action': 'UPSERT', 'ResourceRecordSet': { 'Name': fqn_name, 'Type': rec_type, 'TTL': item["TTL"], 'ResourceRecords': res_rec } } ] } )

Dónde xxxxxxx es el ID de la zona alojada del primer paso de esta épica.

Desarrollador de aplicaciones, con conocimientos de Python

Recursos relacionados

Referencias

Tutoriales y videos