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.
Migración de registros DNS de forma masiva a una zona alojada privada de Amazon Route 53
Ram Kandaswamy, Amazon Web Services
Resumen
Este patrón automatiza la migración masiva de registros DNS a una zona alojada en Amazon Route 53. Utiliza un script de Python con el AWS SDK para Python (Boto3) para leer los datos de los registros de un archivo JSON almacenado en Amazon Simple Storage Service (Amazon S3) y crear los registros mediante programación mediante la API de Route 53.
Si su sistema de origen exporta archivos de zona BIND estándar, la función de importación nativa de Route 53 o cli53
Utilice este patrón cuando necesite migrar una gran cantidad de registros DNS de un sistema existente a una zona alojada de Route 53 sin tener que crear cada registro manualmente a través de la consola.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa
Hoja de cálculo de Excel que contiene registros de zonas alojadas con columnas para el nombre de dominio completo (FQDN), el tipo de registro, el tiempo de vida (TTL) y el valor
Python 3.12 o posterior (consulte Descargar Python
) La biblioteca Python de pandas instalada ()
pip3 install pandasFamiliaridad con los tipos de registros DNS, como los registros A, NAPTR y SRV (consulte Tipos de registros DNS compatibles)
Familiaridad con el lenguaje Python y sus bibliotecas
Limitaciones
Este patrón no utiliza todas las propiedades disponibles de la llamada a la
change_resource_record_setsAPI. Amplíe el código según sea necesario para su caso de uso.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 FQDN en la misma fila. Si no es así, modifique el código para concatenar varios valores para el mismo FQDN.
Este patrón llama directamente a la API de Route 53 mediante Boto3. Puede mejorar el código para utilizar un AWS CloudFormation contenedor para los
update_stackcomandoscreate_stacky, además, utilizar los valores de JSON para rellenar los recursos de la plantilla.Si su sistema de origen puede exportar registros en formato de archivo de zona BIND, considere utilizar la función de importación de Route 53 en su lugar.
Algunos AWS servicios no están disponibles en todos Regiones de AWS. Para conocer la disponibilidad regional, consulta AWSlos servicios por región
. Para ver los puntos de conexión específicos, consulte la página Service endpoints and quotas y elija el enlace del servicio.
Arquitectura

El usuario carga una hoja de cálculo de Excel con los datos del registro de DNS en un bucket de Amazon S3.
Un script de Python que se ejecuta localmente (o en un IDE como Kiro) lee el archivo JSON del bucket de Amazon S3 mediante Boto3.
El script procesa los registros y llama a la operación de la
change_resource_record_setsAPI de Route 53 para crear registros en la zona alojada.
Tools (Herramientas)
Servicios de AWS
Otras herramientas
Kiro: un IDE con capacidades de inteligencia artificial para agentes, que se utiliza para desarrollar y ejecutar el script de migración de Python. Para obtener más información, consulte Kiro.
pandas: una biblioteca de análisis de datos de Python que se utiliza para convertir la hoja de trabajo de Excel al formato JSON.
Prácticas recomendadas
Pruebe con un pequeño subconjunto de 5 a 10 registros antes de ejecutar el script en todos los registros para comprobar el formato de los datos y corregir la creación de registros.
Utilice la
UPSERTacción en lugar de.CREATELaUPSERTacción crea un registro si no existe o lo actualiza si existe. Esto hace que el script sea idempotente y seguro para volver a ejecutarlo.Batch tus cambios para mantenerlos dentro de los límites de las
ChangeResourceRecordSetssolicitudes. Cuando usas laUPSERTacción, cadaResourceRecordelemento cuenta dos veces para alcanzar el máximo de 1000 elementos.Valide los datos antes de insertarlos. Compruebe que los FQDN terminan con un punto (
.), que los valores TTL son enteros positivos y que los tipos de registro coinciden con los tipos de registros DNS admitidos.Realice una copia de seguridad de los registros existentes
antes de realizar cambios masivos. Exporte los registros de la zona alojada actual utilizándolos list_resource_record_setspara proporcionar un punto de reversión.Implemente una lógica de reintentos con un retraso exponencial para gestionar los límites de velocidad de las API de Route 53. Para obtener más información, consulte Reintentos de error y retrocesos exponenciales en. AWS
Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte las mejores prácticas de seguridad y conceder privilegios mínimos en la documentación AWS Identity and Access Management (IAM).
Epics
| Tarea | Descripción | Habilidades requeridas | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
Cree un archivo de Excel para sus registros. |
Fila de ejemplo:
| Ingeniero de datos | ||||||||
Convierta los datos de la hoja de cálculo de Excel a JSON. |
| Ingeniero de datos, desarrollador de Python | ||||||||
Cargue el archivo JSON en un bucket de Amazon S3. |
| Desarrollador de aplicaciones |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Cree una zona alojada. |
También puede utilizar 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. Para obtener más información, consulte AWS Route 53:: HostedZone en la CloudFormation documentación. | Ingeniero en la nube, administrador de redes, con habilidades de Python |
Lea los datos de JSON de Amazon S3. |
| Desarrollador de aplicaciones, desarrollador de Python |
Limpie los valores de los datos e inserte registros. |
| Desarrollador de aplicaciones, con conocimientos de Python |
Resolución de problemas
| Problema | Solución |
|---|---|
Error | Añada un |
Error | Este error se produce al intentar crear un registro que ya existe mediante la acción. |
Error de regulación (se ha superado el límite de velocidad) | Has superado las cinco solicitudes de API por segundo. Implemente un retroceso exponencial con fluctuación de fase. Para obtener más información, consulte Reintentos de error y retroceso exponencial en. AWS |
Los registros no se resuelven | Compruebe que la VPC esté asociada a la zona alojada y que la resolución de DNS esté habilitada en la VPC. Ambos |
| Los datos contienen espacios ininterrumpidos ( |
Recursos relacionados
Referencias
Crear registros mediante la importación de un archivo de zona (documentación de Route 53)
create_hosted_zone
(documentación de Boto3) Tipos de registros DNS compatibles (documentación de Route 53)
Error al volver a intentarlo y se ha producido un retraso exponencial en AWS
Tutoriales y videos
Diseño de DNS con Amazon Route 53
Información adicional
En el caso de los registros NAPTR y SRV, el Value campo de la hoja de cálculo de Excel debe contener todos los componentes necesarios concatenados en una sola cadena. Utilice la función CONCAT de Excel para combinar las propiedades individuales (orden, preferencia, indicadores, servicio, expresión regular, reemplazo para NAPTR; prioridad, peso, puerto, objetivo para SRV) antes de exportar a JSON.
Si la migración incluye más de 1000 registros, divida el archivo JSON en lotes y procese cada lote por separado para mantenerse dentro de los límites de la API de Route 53. Al usar la UPSERT acción, cada ResourceRecord elemento cuenta dos veces para el máximo de 1000 elementos por solicitud. ChangeResourceRecordSets
Conexiones
Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip