

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
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

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 (DNS) 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 Amazon Simple Storage Service (Amazon S3) para almacenar registros. Para trabajar con los datos de manera eficiente, el patrón usa el formato JSON debido a su simplicidad y su capacidad para admitir un diccionario de Python (tipo de datos `dict`).

**nota**  
Si puede generar un archivo de zona desde su sistema, considere utilizar la [característica de importación de Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) como alternativa.

## Requisitos previos y limitaciones
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Requisitos previos **
+ Una hoja de cálculo de Excel que contiene registros de zonas alojadas privadas
+ Familiaridad con distintos tipos de registros DNS, como el registro A, el registro Name Authority Pointer (NAPTR) y el registro SRV (consulte [Tipos de registros DNS compatibles](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html))
+ 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\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) no usa todas las propiedades disponibles de la 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 completo del dominio (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 utiliza AWS SDK para Python (Boto3) para llamar directamente al servicio Route 53. Puede mejorar el código para utilizar un CloudFormation contenedor de AWS para los `update_stack` comandos `create_stack` y, además, utilizar los valores de JSON para rellenar los recursos de la plantilla.

## Arquitectura
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**Pila de tecnología**
+ Zonas alojadas privadas de Route 53 para enrutar el tráfico
+ Amazon S3 para almacenar el archivo JSON de salida

![\[Flujo de trabajo para migrar registros de DNS en bloque a una zona alojada privada de Route 53.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


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.

1. Cree y ejecute un script de Python que convierta los datos de Excel al formato JSON.

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

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

## Tools (Herramientas)
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html): Amazon Route 53 es un servicio web de DNS escalable y de alta disponibilidad que se utiliza para gestionar el registro de dominio, enrutamiento de DNS y comprobación de estado.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html): 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
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### Prepare los datos para la automatización
<a name="prepare-data-for-automation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un archivo de Excel para sus registros. | Utilice los registros que ha exportado desde 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. En el caso de los registros NAPTR y SRV, el valor es una combinación de varias propiedades, por lo que debe utilizar el método de Excel `concat` para combinar estas propiedades.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Ingeniero de datos, con conocimientos de Excel | 
| Verifique el entorno de trabajo. | En el IDE, cree un archivo Python para convertir la hoja de trabajo de entrada de Excel al formato JSON. (En lugar de un IDE, 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.<pre> python3 --version</pre>Instale el paquete **pandas**.<pre> pip3 install pandas --user</pre> | AWS general | 
| Convierta los datos de la hoja de cálculo de Excel a JSON. | Cree un archivo Python que contenga el siguiente código para convertirlo de Excel a JSON.<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>donde `Book1` es el nombre de la hoja de cálculo de Excel y `my.json` el nombre del archivo JSON de salida. | Ingeniero de datos, con conocimientos de Python | 
| Cargue el archivo JSON 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) en la documentación de Amazon S3. | Desarrollador de aplicaciones | 
| FqdnName | RecordType | Valor | TTL | 
| something.example.org | A | 1.1.1.1 | 900 | 

### Insertar registros
<a name="insert-records"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una zona alojada privada. | Use la API [create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) 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.<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>También puede usar una herramienta de infraestructura como código (IaC), como 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. | Use el siguiente código para leer el bucket de S3 y obtener los valores de JSON como un diccionario de Python. <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>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`).<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | Desarrollador de aplicaciones, con conocimientos de Python | 
| Insertar registros. | Use el siguiente código como parte del bucle `for` anterior.<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>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
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**Referencias**
+ [Creación de registros mediante la importación de un archivo de zona](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (documentación de Amazon Route 53)
+ [método create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (documentación de Boto3)
+ [método change\$1resource\$1record\$1sets ](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets)(documentación de Boto3)

**Tutoriales y videos**
+ [El tutorial de Python](https://docs.python.org/3/tutorial/) (documentación de Python)
+ [Diseño de DNS con Amazon Route 53](https://www.youtube.com/watch?v=2y_RBjDkRgY) (YouTube vídeo, *charlas técnicas en línea de AWS*)