Migrer DNS des enregistrements en masse vers une zone hébergée privée Amazon Route 53 - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Migrer DNS des enregistrements en masse vers une zone hébergée privée Amazon Route 53

Créée par Ram Kandaswamy () AWS

Environnement : Production

Technologies : mise en réseau DevOps ; infrastructure

AWSservices : Amazon Route 53 ; Amazon S3

Récapitulatif

Les ingénieurs réseau et les administrateurs cloud ont besoin d'un moyen simple et efficace d'ajouter des enregistrements Domain Name System (DNS) aux zones hébergées privées dans Amazon Route 53. L'utilisation d'une approche manuelle pour copier les entrées d'une feuille de calcul Microsoft Excel vers les emplacements appropriés de la console Route 53 est fastidieuse et source d'erreurs. Ce modèle décrit une approche automatisée qui réduit le temps et les efforts nécessaires pour ajouter plusieurs enregistrements. Il fournit également un ensemble d'étapes répétables pour la création de plusieurs zones hébergées.

Ce modèle utilise Amazon Simple Storage Service (Amazon S3) pour stocker les enregistrements. Pour travailler efficacement avec les données, le modèle utilise le JSON format en raison de sa simplicité et de sa capacité à prendre en charge un dictionnaire Python (type de dict données).

Remarque : Si vous pouvez générer un fichier de zone à partir de votre système, pensez plutôt à utiliser la fonctionnalité d'importation de Route 53.

Conditions préalables et limitations

Prérequis

  • Feuille de calcul Excel contenant des enregistrements de zones hébergées privées

  • Connaissance des différents types d'DNSenregistrements tels que l'enregistrement A, l'enregistrement Name Authority Pointer (NAPTR) et l'SRVenregistrement (voir Types d'DNSenregistrements pris en charge)

  • Connaissance du langage Python et de ses bibliothèques

Limites

  • Le modèle ne fournit pas une couverture étendue pour tous les scénarios d'utilisation. Par exemple, l'appel change_resource_record_sets n'utilise pas toutes les propriétés disponibles du. API

  • Dans la feuille de calcul Excel, la valeur de chaque ligne est supposée être unique. Plusieurs valeurs pour chaque nom de domaine complet (FQDN) devraient apparaître dans la même ligne. Si ce n'est pas le cas, vous devez modifier le code fourni dans ce modèle pour effectuer la concaténation nécessaire.

  • Le modèle utilise le AWS SDK for Python (Boto3) pour appeler directement le service Route 53. Vous pouvez améliorer le code pour utiliser un AWS CloudFormation wrapper pour les update_stack commandes create_stack et et utiliser les JSON valeurs pour renseigner les ressources du modèle.

Architecture

Pile technologique

  • Route 53 zones hébergées privées pour acheminer le trafic

  • Amazon S3 pour le stockage du JSON fichier de sortie

Flux de travail pour la migration d'DNSenregistrements en masse vers une zone hébergée privée Route 53.

Le flux de travail comprend les étapes suivantes, comme illustré dans le schéma précédent et discuté dans la section Epics :

  1. Téléchargez une feuille de calcul Excel contenant les informations du jeu d'enregistrements dans un compartiment S3.

  2. Créez et exécutez un script Python qui convertit les données Excel au JSON format.

  3. Lisez les enregistrements du compartiment S3 et nettoyez les données.

  4. Créez des ensembles de records dans votre zone hébergée privée.

Outils

  • Route 53 — Amazon Route 53 est un service DNS Web hautement disponible et évolutif qui gère l'enregistrement, le DNS routage et la vérification de l'état des domaines.

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets. Vous pouvez utiliser Amazon S3 pour stocker et récupérer n'importe quelle quantité de données, n'importe quand et depuis n'importe quel emplacement sur le Web.

Épopées

TâcheDescriptionCompétences requises

Créez un fichier Excel pour vos dossiers.

Utilisez les enregistrements que vous avez exportés depuis votre système actuel pour créer une feuille de calcul Excel contenant les colonnes requises pour un enregistrement, telles que le nom de domaine complet (FQDN), le type d'enregistrement, la durée de vie (TTL) et la valeur. Pour les SRV enregistrements NAPTR et les enregistrements, la valeur est une combinaison de plusieurs propriétés. Utilisez donc la concat méthode d'Excel pour combiner ces propriétés.

FqdnName

RecordType

Valeur

TTL

something.exemple.org

A

1.1.1.1

900

Ingénieur de données, compétences Excel

Vérifiez l'environnement de travail.

Dans votreIDE, créez un fichier Python pour convertir la feuille de calcul d'entrée Excel au JSON format. (Au lieu d'unIDE, vous pouvez également utiliser un SageMaker bloc-notes Amazon pour travailler avec du code Python.)

Vérifiez que la version de Python que vous utilisez est la version 3.7 ou ultérieure.

python3 --version

Installez le package pandas.

pip3 install pandas --user
Général AWS

Convertissez les données de la feuille de calcul Excel en. JSON

Créez un fichier Python contenant le code suivant pour le convertir d'Excel enJSON.

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

Book1 est le nom de la feuille de calcul Excel et my.json le nom du JSON fichier de sortie.

Ingénieur de données, compétences en Python

Téléchargez le JSON fichier dans un compartiment S3.

Chargez le fichier my.json dans un compartiment S3. Pour plus d'informations, consultez la section Création d'un compartiment dans la documentation Amazon S3.

Développeur d'applications
TâcheDescriptionCompétences requises

Créez une zone hébergée privée.

Utilisez le create_hosted_zone API et l'exemple de code Python suivant pour créer une zone hébergée privée. Remplacez les paramètres hostedZoneNamevpcRegion, et vpcId par vos propres valeurs.

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)

Vous pouvez également utiliser un outil d'infrastructure en tant que code (IaC) AWS CloudFormation pour remplacer ces étapes par un modèle qui crée une pile avec les ressources et les propriétés appropriées.

Architecte cloud, administrateur réseau, compétences en Python

Récupérez les détails sous forme de dictionnaire depuis Amazon S3.

Utilisez le code suivant pour lire le contenu du compartiment S3 et obtenir les JSON valeurs sous forme de dictionnaire 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)

json_content contient le dictionnaire Python.

Développeur d'applications, compétences en Python

Nettoyez les valeurs de données pour les espaces et les caractères Unicode.

Par mesure de sécurité afin de garantir l'exactitude des données, utilisez le code suivant pour effectuer une opération de découpage sur les valeurs saisies. json_content Ce code supprime les espaces au début et à la fin de chaque chaîne. Il utilise également la replace méthode pour supprimer les espaces durs (non cassants) (les \xa0 caractères).

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() }
Développeur d'applications, compétences en Python

Insérez des enregistrements.

Utilisez le code suivant dans le cadre de la for boucle précédente.

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

Où se xxxxxxx trouve l'identifiant de la zone hébergée dès la première étape de cette épopée.

Développeur d'applications, compétences en Python

Ressources connexes

Références

Tutoriels et vidéos