View a markdown version of this page

Esegui la migrazione di record DNS in blocco verso una zona ospitata privata di Amazon Route 53 - Prontuario AWS

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

Ram Kandaswamy, Amazon Web Services

Riepilogo

Questo modello automatizza la migrazione di massa dei record DNS in una zona ospitata da Amazon Route 53. Utilizza uno script Python con l' AWS SDK for Python (Boto3) per leggere i dati dei record da un file JSON archiviato in Amazon Simple Storage Service (Amazon S3) e creare i record a livello di codice utilizzando l'API Route 53.

Se il sistema di origine esporta file di zona BIND standard, la funzionalità di importazione nativa di Route 53 o cli53 (uno strumento CLI open source gestito dalla comunità e non affiliato a) può gestire la migrazione AWS senza script personalizzati. Tuttavia, in molti ambienti aziendali, i record DNS risiedono in fogli di lavoro Excel anziché in file di zona. Le esportazioni di Excel spesso contengono problemi di qualità dei dati, come spazi non divisibili e caratteri Unicode, che gli strumenti di importazione standard non sono in grado di gestire. Questo modello colma questa lacuna: legge da Excel e pulisce i dati per creare record dall'inizio alla fine.

Utilizza questo schema quando devi migrare un gran numero di record DNS da un sistema esistente a una zona ospitata da Route 53 senza creare ogni record manualmente tramite la console.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • Questo modello non utilizza tutte le proprietà disponibili della chiamata change_resource_record_sets API. Estendete il codice secondo necessità per il vostro caso d'uso.

  • Nel foglio di lavoro di Excel, si presume che il valore di ogni riga sia univoco. Si prevede che nella stessa riga vengano visualizzati più valori per ogni FQDN. In caso contrario, modifica il codice per concatenare più valori per lo stesso FQDN.

  • Questo modello richiama direttamente l'API Route 53 utilizzando Boto3. È possibile migliorare il codice per utilizzare un AWS CloudFormation wrapper per update_stack i comandi create_stack and e utilizzare i valori JSON per popolare le risorse del modello.

  • Se il sistema di origine è in grado di esportare i record nel formato di file di zona BIND, è consigliabile utilizzare invece la funzionalità di importazione di Route 53.

  • Alcuni AWS servizi non sono disponibili in tutti Regioni AWS. Per informazioni sulla disponibilità per regione, consulta AWSi servizi per regione. Per endpoint specifici, consulta la pagina Endpoint e quote del servizio e scegli il link relativo al servizio.

Architecture

  1. L'utente carica un foglio di lavoro Excel con i dati dei record DNS in un bucket Amazon S3.

  2. Uno script Python in esecuzione localmente (o in un IDE come Kiro) legge il file JSON dal bucket Amazon S3 utilizzando Boto3.

  3. Lo script elabora i record e chiama l'operazione dell'change_resource_record_setsAPI Route 53 per creare record nella zona ospitata.

Tools (Strumenti)

Servizi AWS

  • Route 53: fornisce la zona ospitata in cui vengono creati i record DNS. Questo modello utilizza le operazioni create_hosted_zone e change_resource_record_sets API.

  • Amazon S3: archivia il file JSON che contiene i dati dei record DNS da migrare.

Altri strumenti

  • Kiro — Un IDE con funzionalità di intelligenza artificiale agentica, utilizzato per sviluppare ed eseguire lo script di migrazione Python. Per ulteriori informazioni, consulta Kiro.

  • pandas — Una libreria di analisi dei dati in Python, utilizzata per convertire il foglio di lavoro di Excel in formato JSON.

Best practice

  • Prova con un piccolo sottoinsieme di 5-10 record prima di eseguire lo script su tutti i record per verificare la formattazione dei dati e la corretta creazione dei record.

  • Utilizzate l'azione invece diUPSERT. CREATE L'UPSERTazione crea un record se non esiste o lo aggiorna se esiste. Ciò rende lo script idempotente e sicuro da rieseguire.

  • Batch delle modifiche per rispettare i limiti delle ChangeResourceRecordSets richieste. Quando si utilizza l'UPSERTazione, ogni ResourceRecord elemento conta due volte per raggiungere il limite massimo di 1.000 elementi.

  • Convalida i dati prima dell'inserimento. Verifica che gli FQDN terminino con un punto (.), che i valori TTL siano numeri interi positivi e che i tipi di record corrispondano ai tipi di record DNS supportati.

  • Esegui il backup dei record esistenti prima di apportare modifiche in blocco. Esporta i record correnti della zona ospitata utilizzandoli list_resource_record_sets per fornire un punto di rollback.

  • Implementa la logica di ripetizione con backoff esponenziale per gestire i limiti di velocità dell'API Route 53. Per ulteriori informazioni, consulta Tentativi di errore e backoff esponenziale in. AWS

  • Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le best practice relative alla concessione dei privilegi minimi e alla sicurezza nella documentazione AWS Identity and Access Management (IAM).

Epiche

OperazioneDescriptionCompetenze richieste

Crea un file Excel per i tuoi archivi.

  1. Esporta i record dal tuo attuale sistema DNS.

  2. Crea un foglio di lavoro Excel con queste colonne:FqdnName,,RecordType,Value. TTL

  3. Per i record NAPTR e SRV, usa la funzione CONCAT di Excel per combinare più valori di proprietà nella colonna. Value

  4. Verificate che ogni FQDN termini con un punto (.) e che i valori TTL siano numeri interi positivi.

Riga di esempio:

FqdnName

RecordType

Valore

TTL

something.example.org

A

192.0.2.1

900

Ingegnere dei dati

Converti i dati del foglio di lavoro Excel in JSON.

  1. Verifica che Python 3.12 o versione successiva sia installato eseguendolo python3 --version nel terminale.

  2. Installa la libreria pandas pip3 install pandas --user eseguendola nel terminale.

  3. Crea un file Python con il seguente codice per convertire il foglio di lavoro Excel in JSON:

import pandas as pd data=pd.read_excel('./Book1.xls') data.to_json(path_or_buf='my.json',orient='records')
  1. Eseguire lo script. Verifica che il file di output my.json contenga i record previsti.

Ingegnere dei dati, sviluppatore Python

Carica il file JSON in un bucket Amazon S3.

  1. Crea un bucket Amazon S3 se non ne esiste già uno. Per ulteriori informazioni, consulta Creazione di un bucket nella documentazione di Amazon S3.

  2. Carica il my.json file nel bucket.

Sviluppatore di app
OperazioneDescriptionCompetenze richieste

Crea una zona ospitata.

  1. Crea un file Python con il seguente codice per creare una zona ospitata. Sostituisci <hosted-zone-name> <vpc-region> e <vpc-id> con i tuoi valori.

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)
  1. Esegui lo script e annota l'ID della zona ospitata dalla risposta.

Puoi anche utilizzare uno strumento Infrastructure as Code (IaC) AWS CloudFormation per sostituire questi passaggi con un modello che crei uno stack con le risorse e le proprietà appropriate. Per ulteriori informazioni, consulta AWS Route 53:: HostedZone nella CloudFormation documentazione.

Architetto cloud, amministratore di rete, competenze in Python

Leggi i dati JSON da Amazon S3.

  1. Usa questo codice per leggere dal bucket Amazon S3 e caricarlo come dizionario Python. 

import json import boto3 s3_client = boto3.client('s3') fileobj = s3_client.get_object( Bucket='<your-bucket-name>', Key='my.json' ) filedata = fileobj['Body'].read() contents = filedata.decode('utf-8') json_content = json.loads(contents)
  1. Verifica che json_content contenga i record previsti stampando le prime voci.

Sviluppatore di app, sviluppatore Python

Pulisci i valori dei dati e inserisci i record.

  1. Usa questo codice per pulire i valori dei dati e inserire i record nella zona ospitata. Sostituisci <hosted-zone-id> con l'ID della zona ospitata precedentemente configurata.

import unicodedata import time 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()} change_response = route53_client.change_resource_record_sets( HostedZoneId='<hosted-zone-id>', ChangeBatch={ 'Comment': 'Created by automation', 'Changes': [ { 'Action': 'UPSERT', 'ResourceRecordSet': { 'Name': fqn_name, 'Type': rec_type, 'TTL': item["TTL"], 'ResourceRecords': [res_rec] } } ] } ) time.sleep(1) # Delay to avoid PriorRequestNotComplete errors
  1. Monitorare l'output per eventuali errori. Se si verifica una limitazione, aumenta il ritardo o implementa un backoff esponenziale.

Sviluppatore di app, competenze in Python

Risoluzione dei problemi

ProblemaSoluzione

Errore PriorRequestNotComplete

Aggiungi un time.sleep() ritardo di 1—2 secondi tra una chiamata e l'altra. change_resource_record_sets Route 53 elabora le modifiche in modo asincrono e una modifica precedente potrebbe essere ancora in corso.

Errore InvalidChangeBatch

Questo errore si verifica quando si tenta di creare un record già esistente utilizzando l'azione. CREATE UPSERTUtilizzatelo invece per rendere lo script idempotente.

Errore di limitazione (limite di velocità superato)

Hai superato le cinque richieste API al secondo. Implementa il backoff esponenziale con jitter. Per ulteriori informazioni, consulta Ritentativi di errore e backoff esponenziale in. AWS

I record non si risolvono

Verifica che il VPC sia associato alla zona ospitata e che la risoluzione DNS sia abilitata sul VPC. Entrambi enableDnsSupport e enableDnsHostnames devono essere impostati su. true

InvalidInputerrore sui valori dei record

I dati contengono spazi non divisibili (\xa0) o spazi leading/trailing bianchi. Applica il codice di pulizia dei dati dell'attività «Pulisci i valori dei dati e inserisci i record» prima dell'inserimento.

Risorse correlate

Riferimenti

Tutorial e video

Progettazione DNS con Amazon Route 53 (video)

Informazioni aggiuntive

Per i record NAPTR e SRV, il Value campo del foglio di lavoro di Excel deve contenere tutti i componenti richiesti concatenati in un'unica stringa. Usa la funzione CONCAT di Excel per combinare le singole proprietà (order, preference, flags, service, regexp, replacement for NAPTR; priority, weight, port, target per SRV) prima dell'esportazione in JSON.

Se la migrazione coinvolge più di 1.000 record, dividi il file JSON in batch ed elabora ogni batch separatamente per rispettare i limiti dell'API Route 53. Quando si utilizza l'UPSERTazione, ogni ResourceRecord elemento conta due volte per raggiungere il massimo di 1.000 elementi per richiesta. ChangeResourceRecordSets

Allegati

Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip