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

Creato da Ram Kandaswamy (AWS)

Ambiente: produzione

Tecnologie: reti CloudNative DevOps; infrastrutture

Servizi AWS: AWS Cloud9; Amazon Route 53; Amazon S3

Riepilogo

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 l'ambiente di sviluppo integrato (IDE) AWS Cloud9 per lo sviluppo e il test e 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.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • Il modello non fornisce una copertura estesa per tutti gli scenari di utilizzo. Ad esempio, la chiamata 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.

Architettura

Stack tecnologico

  • Zone ospitate private Route 53 per il routing del traffico

  • IDE AWS Cloud9 per sviluppo e test

  • 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.

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.

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

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

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

Strumenti

  • Route 53 — 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.

  • AWS Cloud9 — AWS Cloud9 è un IDE che offre una ricca esperienza di modifica del codice con supporto per diversi linguaggi di programmazione e debugger di runtime e un terminale integrato. Contiene una raccolta di strumenti utilizzati per programmare, creare, eseguire, testare, eseguire il debug del software e per rilasciare software nel cloud.

  • Amazon S3 — Amazon Simple 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

AttivitàDescrizioneCompetenze 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

FqdnName

RecordType

Valore

TTL

qualcosa.example.org

A

1.1.1.1

900

Ingegnere dei dati, competenze in Excel

Verifica l'ambiente di lavoro.

Nell'IDE AWS Cloud9, crea un file Python per convertire il foglio di lavoro di input di Excel in formato JSON. (Invece di AWS Cloud9, puoi anche usare un notebook SageMaker Amazon per lavorare con il codice Python.)

Verifica che la versione di Python che stai utilizzando sia la versione 3.7 o successiva.

python3 --version

Installa il pacchetto pandas.

pip3 install pandas --user
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.

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

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 nella documentazione di Amazon S3.

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Crea una zona ospitata privata.

Usa l'API create_hosted_zone e il seguente codice di esempio Python per creare una zona ospitata privata. Sostituisci i parametri e con i tuoi valorihostedZoneName. vpcRegion vpcId

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)

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. 

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)

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).

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() }
Sviluppatore di app, competenze in Python

Inserisci record.

Utilizzate il codice seguente come parte del for ciclo precedente.

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 } } ] } )

xxxxxxxDov'è l'ID della zona ospitata del primo passaggio di questa epopea.

Sviluppatore di app, competenze in Python

Risorse correlate

Riferimenti

Tutorial e video