Esegui la migrazione di DNS record 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 DNS record in blocco verso una zona ospitata privata di Amazon Route 53

Creato da Ram Kandaswamy () AWS

Riepilogo

Gli ingegneri di rete e gli amministratori del cloud hanno bisogno di un modo semplice ed efficiente per aggiungere i record del Domain Name System (DNS) 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 JSON formato per la sua semplicità e la sua capacità di supportare un dizionario Python (tipo di dict 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

  • Un foglio di lavoro di Excel che contiene i record delle zone ospitate private

  • Familiarità con diversi tipi di DNS record come A record, Name Authority Pointer (NAPTR) record e record (vedi Tipi di SRV record supportati DNS)

  • 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_resource_record_sets non utilizza tutte le proprietà disponibili di. 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 AWS SDK for Python (Boto3) per chiamare direttamente il servizio Route 53. È possibile migliorare il codice per utilizzare un AWS CloudFormation wrapper per update_stack i comandi create_stack and e utilizzare i JSON valori per popolare le risorse del modello.

Architettura

Stack tecnologico

  • Zone ospitate private Route 53 per il routing del traffico

  • Amazon S3 per l'archiviazione del file di output JSON

Flusso di lavoro per la migrazione di DNS record 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 DNS Web altamente disponibile e scalabile che gestisce la registrazione del dominio, il DNS routing e il controllo dello stato.

  • 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 NAPTR i SRV record, il valore è una combinazione di più proprietà, quindi usa il concat metodo di Excel per combinare queste proprietà.

FqdnName

RecordType

Valore

TTL

qualcosa.example.org

A

1.1.1.1

900

Ingegnere dei dati, competenze in Excel

Verifica l'ambiente di lavoro.

Nel tuoIDE, crea un file Python per convertire il foglio di lavoro di input di Excel in formato. JSON (Invece di unIDE, 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.

python3 --version

Installa il pacchetto pandas.

pip3 install pandas --user
Generale AWS

Converti i dati del foglio di lavoro Excel in. JSON

Crea un file Python che contenga il seguente codice da convertire da Excel in. 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 di outputJSON.

Ingegnere dei dati, competenze in Python

Caricare 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 create_hosted_zone API 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 Infrastructure as Code (IaC), ad esempio AWS CloudFormation per sostituire questi passaggi con un modello che crei 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 JSON valori 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