

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esegui la migrazione di record DNS in blocco verso una zona ospitata privata di Amazon Route 53
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

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

Gli ingegneri di rete e gli amministratori del cloud hanno bisogno di un modo semplice ed efficiente per aggiungere record DNS (Domain Name System) alle zone private ospitate in Amazon Route 53. L'utilizzo di un approccio manuale per copiare le voci da un foglio di lavoro di Microsoft Excel nelle posizioni appropriate nella console Route 53 è noioso e soggetto a errori. Questo modello descrive un approccio automatizzato che riduce il tempo e lo sforzo necessari per aggiungere più record. Fornisce inoltre una serie di passaggi ripetibili per la creazione di più zone ospitate.

Questo modello utilizza Amazon Simple Storage Service (Amazon S3) per archiviare i record. Per lavorare con i dati in modo efficiente, il pattern utilizza il formato JSON per la sua semplicità e la sua capacità di supportare un dizionario Python `dict` (tipo di dati).

**Nota**  
Se riesci a generare un file di zona dal tuo sistema, prendi in considerazione l'utilizzo della [funzione di importazione Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html).

## Prerequisiti e limitazioni
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Prerequisiti**
+ Un foglio di lavoro Excel che contiene i record delle zone ospitate private
+ [Familiarità con diversi tipi di record DNS come A record, Name Authority Pointer (NAPTR) e record SRV (vedi Tipi di record DNS supportati)](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)
+ Familiarità con il linguaggio Python e le sue librerie

**Limitazioni**
+ Il modello non fornisce una copertura estesa per tutti gli scenari di utilizzo. Ad esempio, la chiamata [change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) non utilizza tutte le proprietà disponibili dell'API.
+ Nel foglio di lavoro di Excel, si presume che il valore di ogni riga sia univoco. È previsto che nella stessa riga compaiano più valori per ogni nome di dominio completo (FQDN). Se ciò non è vero, è necessario modificare il codice fornito in questo modello per eseguire la concatenazione necessaria.
+ Il modello utilizza l'SDK AWS per Python (Boto3) per chiamare direttamente il servizio Route 53. Puoi migliorare il codice per utilizzare un CloudFormation wrapper AWS per i `update_stack` comandi `create_stack` and e utilizzare i valori JSON per popolare le risorse del modello.

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

**Stack tecnologico**
+ Zone ospitate private Route 53 per il routing del traffico
+ Amazon S3 per l'archiviazione del file JSON di output

![\[Flusso di lavoro per la migrazione di record DNS in blocco verso una zona ospitata privata Route 53.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


*Il flusso di lavoro consiste nei seguenti passaggi, come illustrato nel diagramma precedente e discusso nella sezione Epics:*

1. Carica un foglio di lavoro Excel contenente le informazioni sul set di record in un bucket S3.

1. Crea ed esegui uno script Python che converta i dati di Excel in formato JSON.

1. Leggi i record dal bucket S3 e pulisci i dati.

1. Crea set di record nella tua zona ospitata privata.

## Tools (Strumenti)
<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 è un servizio Web DNS altamente disponibile e scalabile che gestisce la registrazione del dominio, il routing DNS e il controllo dello stato.
+ [Amazon S3 — Amazon Simple](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) Storage Service (Amazon S3) è un servizio di storage di oggetti. È possibile utilizzare Amazon S3 per memorizzare e recuperare qualsiasi volume di dati, in qualunque momento e da qualunque luogo tramite il Web.

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

### Prepara i dati per l'automazione
<a name="prepare-data-for-automation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un file Excel per i tuoi archivi. | Usa i record che hai esportato dal sistema corrente per creare un foglio di lavoro Excel contenente le colonne richieste per un record, ad esempio nome di dominio completo (FQDN), tipo di record, Time to Live (TTL) e valore. Per i record NAPTR e SRV, il valore è una combinazione di più proprietà, quindi usa il metodo di Excel per combinare queste proprietà. `concat`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Ingegnere dei dati, competenze in Excel | 
| Verifica l'ambiente di lavoro. | Nel tuo IDE, crea un file Python per convertire il foglio di lavoro di input di Excel in formato JSON. (Invece di un IDE, puoi anche usare un SageMaker notebook Amazon per lavorare con il codice Python.)Verifica che la versione di Python che stai utilizzando sia la versione 3.7 o successiva.<pre> python3 --version</pre>Installa il pacchetto **pandas**.<pre> pip3 install pandas --user</pre> | Informazioni generali su AWS | 
| Converti i dati del foglio di lavoro Excel in JSON. | Crea un file Python che contenga il seguente codice da convertire da 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>dove `Book1` è il nome del foglio di lavoro di Excel ed `my.json` è il nome del file JSON di output. | Ingegnere dei dati, competenze in Python | 
| Carica il file JSON in un bucket S3. | Caricare il file `my.json` in un bucket S3. Per ulteriori informazioni, consulta [Creazione di un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) nella documentazione di Amazon S3. | Sviluppatore di app | 
| FqdnName | RecordType | Valore | TTL | 
| qualcosa.example.org | A | 1.1.1.1 | 900 | 

### Inserisci record
<a name="insert-records"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una zona ospitata privata. | Usa l'[API create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) e il seguente codice di esempio Python per creare una zona ospitata privata. Sostituisci i parametri e con i tuoi valori`hostedZoneName`. `vpcRegion` `vpcId`<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>Puoi anche utilizzare uno strumento di infrastruttura come codice (IaC) come AWS CloudFormation per sostituire questi passaggi con un modello che crea uno stack con le risorse e le proprietà appropriate. | Architetto cloud, amministratore di rete, competenze in Python | 
| Recupera i dettagli come dizionario da Amazon S3. | Usa il codice seguente per leggere dal bucket S3 e ottenere i valori JSON come dizionario 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>dove `json_content` contiene il dizionario Python. | Sviluppatore di app, competenze in Python | 
| Pulisci i valori dei dati per spazi e caratteri Unicode. | Come misura di sicurezza per garantire la correttezza dei dati, utilizzate il codice seguente per eseguire un'operazione di cancellazione dei valori inseriti. `json_content` Questo codice rimuove i caratteri di spazio all'inizio e alla fine di ogni stringa. Utilizza anche il `replace` metodo per rimuovere gli spazi rigidi (non interrotti) (i `\xa0` caratteri).<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> | Sviluppatore di app, competenze in Python | 
| Inserisci record. | Utilizzate il codice seguente come parte del `for` ciclo precedente.<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>`xxxxxxx`Dov'è l'ID della zona ospitata del primo passaggio di questa epopea. | Sviluppatore di app, competenze in Python | 

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

**Riferimenti**
+ [Creazione di record importando un file di zona](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (documentazione di Amazon Route 53)
+ [metodo create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (documentazione Boto3)
+ [metodo change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) (documentazione Boto3)

**Tutorial e video**
+ [Il tutorial su Python (documentazione](https://docs.python.org/3/tutorial/) Python)
+ [Progettazione DNS con Amazon Route 53](https://www.youtube.com/watch?v=2y_RBjDkRgY) (YouTube video, *AWS Online Tech Talks*)