View a markdown version of this page

Migrer des enregistrements DNS 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 des enregistrements DNS en masse vers une zone hébergée privée Amazon Route 53

Ram Kandaswamy, Amazon Web Services

Résumé

Ce modèle automatise la migration en masse des enregistrements DNS vers une zone hébergée Amazon Route 53. Il utilise un script Python associé au AWS SDK pour Python (Boto3) pour lire les données d'enregistrement d'un fichier JSON stocké dans Amazon Simple Storage Service (Amazon S3) et créer les enregistrements par programmation à l'aide de l'API Route 53.

Si votre système source exporte des fichiers de zone BIND standard, la fonctionnalité d'importation native de Route 53 ou cli53 (un outil CLI open source géré par la communauté et non AWS affilié) peut gérer la migration sans script personnalisé. Toutefois, dans de nombreux environnements d'entreprise, les enregistrements DNS se trouvent dans des feuilles de calcul Excel plutôt que dans des fichiers de zone. Les exportations Excel présentent souvent des problèmes de qualité des données, tels que des espaces non interrompus et des caractères Unicode, que les outils d'importation standard ne prennent pas en charge. Ce modèle comble cette lacune : il lit dans Excel et nettoie les données pour créer des enregistrements de bout en bout.

Utilisez ce modèle lorsque vous devez migrer un grand nombre d'enregistrements DNS d'un système existant vers une zone hébergée Route 53 sans créer chaque enregistrement manuellement via la console.

Conditions préalables et limitations

Conditions préalables

  • Un compte AWS actif

  • Feuille de calcul Excel contenant des enregistrements de zone hébergée avec des colonnes pour le nom de domaine complet (FQDN), le type d'enregistrement, la durée de vie (TTL) et la valeur

  • Python 3.12 ou version ultérieure (voir Télécharger Python)

  • La bibliothèque Python Pandas installée () pip3 install pandas

  • Connaissance des types d'enregistrement DNS tels que les enregistrements A, NAPTR et SRV (voir Types d'enregistrements DNS pris en charge)

  • Connaissance du langage Python et de ses bibliothèques

Limites

  • Ce modèle n'utilise pas toutes les propriétés disponibles de l'appel change_resource_record_sets d'API. Étendez le code selon les besoins de votre cas d'utilisation.

  • Dans la feuille de calcul Excel, la valeur de chaque ligne est supposée être unique. Plusieurs valeurs pour chaque FQDN devraient apparaître dans la même ligne. Si ce n'est pas le cas, modifiez le code pour concaténer plusieurs valeurs pour le même FQDN.

  • Ce modèle appelle l'API Route 53 directement à l'aide de Boto3. Vous pouvez améliorer le code pour utiliser un AWS CloudFormation wrapper pour les update_stack commandes create_stack et et utiliser les valeurs JSON pour renseigner les ressources du modèle.

  • Si votre système source peut exporter des enregistrements au format de fichier de zone BIND, pensez plutôt à utiliser la fonctionnalité d'importation Route 53.

  • Certains AWS services ne sont pas disponibles dans tous les cas Régions AWS. Pour connaître la disponibilité par région, consultez la section AWSServices par région. Pour des points de terminaison spécifiques, consultez la page Points de terminaison et quotas du service, puis choisissez le lien vers le service.

Architecture

  1. L'utilisateur télécharge une feuille de calcul Excel contenant les données d'enregistrement DNS dans un compartiment Amazon S3.

  2. Un script Python exécuté localement (ou dans un IDE tel que Kiro) lit le fichier JSON depuis le compartiment Amazon S3 à l'aide de Boto3.

  3. Le script traite les enregistrements et appelle l'opération d'change_resource_record_setsAPI Route 53 pour créer des enregistrements dans la zone hébergée.

Outils

Services AWS

  • Route 53 — Indique la zone hébergée dans laquelle les enregistrements DNS sont créés. Ce modèle utilise les opérations de change_resource_record_sets l'API create_hosted_zone et.

  • Amazon S3 : stocke le fichier JSON qui contient les données d'enregistrement DNS à migrer.

Autres outils

  • Kiro — Un IDE doté de fonctionnalités d'intelligence artificielle, utilisé pour développer et exécuter le script de migration Python. Pour plus d'informations, consultez Kiro.

  • pandas — Une bibliothèque d'analyse de données Python, utilisée pour convertir la feuille de calcul Excel au format JSON.

Bonnes pratiques

  • Testez avec un petit sous-ensemble de 5 à 10 enregistrements avant d'exécuter le script sur tous les enregistrements afin de vérifier le formatage des données et la création correcte des enregistrements.

  • Utilisez l'UPSERTaction au lieu deCREATE. L'UPSERTaction crée un enregistrement s'il n'existe pas ou le met à jour s'il existe. Cela rend le script idempotent et peut être réexécuté en toute sécurité.

  • Batch vos modifications pour respecter les limites des ChangeResourceRecordSets demandes. Lorsque vous utilisez cette UPSERT action, chaque ResourceRecord élément compte deux fois dans le calcul du maximum de 1 000 éléments.

  • Validez les données avant de les insérer. Vérifiez que les noms de domaine complets se terminent par un point (.), que les valeurs TTL sont des entiers positifs et que les types d'enregistrement correspondent aux types d'enregistrements DNS pris en charge.

  • Sauvegardez les enregistrements existants avant d'apporter des modifications groupées. Exportez les enregistrements actuels de la zone hébergée en utilisant list_resource_record_sets pour fournir un point de restauration.

  • Implémentez une logique de nouvelle tentative avec un ralentissement exponentiel pour gérer les limites de débit de l'API Route 53. Pour plus d'informations, consultez la section Rétentatives d'erreur et recul exponentiel dans. AWS

  • Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections Accorder le moindre privilège et Bonnes pratiques en matière de sécurité dans la documentation Gestion des identités et des accès AWS (IAM).

Épopées

Sous-tâcheDescriptionCompétences requises

Créez un fichier Excel pour vos dossiers.

  1. Exportez les enregistrements de votre système DNS actuel.

  2. Créez une feuille de calcul Excel avec les colonnes suivantes :FqdnName, RecordTypeValue,TTL.

  3. Pour les enregistrements NAPTR et SRV, utilisez la fonction CONCAT d'Excel pour combiner plusieurs valeurs de propriétés dans la colonne. Value

  4. Vérifiez que chaque FQDN se termine par un point (.) et que les valeurs TTL sont des entiers positifs.

Exemple de ligne :

FqdnName

RecordType

Value

TTL

something.exemple.org

A

192.0.2.1

900

Ingénieur de données

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

  1. Vérifiez que Python 3.12 ou version ultérieure est installé en l'exécutant python3 --version dans le terminal.

  2. Installez la bibliothèque Pandas en l'exécutant pip3 install pandas --user dans le terminal.

  3. Créez un fichier Python avec le code suivant pour convertir la feuille de calcul Excel en JSON :

import pandas as pd data=pd.read_excel('./Book1.xls') data.to_json(path_or_buf='my.json',orient='records')
  1. Exécutez le script. Vérifiez que le fichier de sortie my.json contient les enregistrements attendus.

Ingénieur de données, développeur Python

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

  1. Créez un compartiment Amazon S3 s'il n'en existe pas déjà un. Pour plus d'informations, consultez la section Création d'un compartiment dans la documentation Amazon S3.

  2. Téléchargez le my.json fichier dans le bucket.

Développeur d’applications
Sous-tâcheDescriptionCompétences requises

Créez une zone hébergée.

  1. Créez un fichier Python avec le code suivant pour créer une zone hébergée. Remplacez <hosted-zone-name><vpc-region>, et <vpc-id> par vos 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)
  1. Exécutez le script et notez l'ID de zone hébergée indiqué dans la réponse.

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. Pour plus d'informations, consultez AWS Route 53 : : HostedZone dans la CloudFormation documentation.

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

Lisez les données JSON depuis Amazon S3.

  1. Utilisez ce code pour lire le contenu du compartiment Amazon S3 et le charger sous forme de dictionnaire 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. Vérifiez qu'il json_content contient les enregistrements attendus en imprimant les premières entrées.

Développeur d'applications, développeur Python

Nettoyez les valeurs des données et insérez des enregistrements.

  1. Utilisez ce code pour nettoyer les valeurs des données et insérer des enregistrements dans la zone hébergée. <hosted-zone-id>Remplacez-le par l'ID de la zone hébergée précédemment configurée.

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. Surveillez la sortie pour détecter des erreurs. En cas d'étranglement, augmentez le délai ou implémentez un ralentissement exponentiel.

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

Résolution des problèmes

ProblèmeSolution

PriorRequestNotCompleteErreur

Ajoutez un time.sleep() délai de 1 à 2 secondes entre les change_resource_record_sets appels. Route 53 traite les modifications de manière asynchrone, et une modification précédente est peut-être toujours en cours.

InvalidChangeBatchErreur

Cette erreur se produit lorsque vous essayez de créer un enregistrement qui existe déjà à l'aide de l'CREATEaction. Utilisez-le UPSERT plutôt pour rendre le script idempotent.

Erreur de régulation (limite de débit dépassée)

Vous avez dépassé les cinq demandes d'API par seconde. Implémentez un recul exponentiel avec instabilité. Pour plus d'informations, consultez la section Rétentatives d'erreur et recul exponentiel dans. AWS

Les dossiers ne sont pas résolus

Vérifiez que le VPC est associé à la zone hébergée et que la résolution DNS est activée sur le VPC. Les deux enableDnsSupport et enableDnsHostnames doivent être paramétrés surtrue.

InvalidInputerreur sur les valeurs d'enregistrement

Les données contiennent des espaces non interrompus (\xa0) ou des espaces leading/trailing blancs. Appliquez le code de nettoyage des données issu de la tâche « Nettoyer les valeurs des données et insérer des enregistrements » avant l'insertion.

Ressources connexes

Références

Tutoriels et vidéos

Conception de DNS à l'aide d'Amazon Route 53 (vidéo)

Informations supplémentaires

Pour les enregistrements NAPTR et SRV, le Value champ de la feuille de calcul Excel doit contenir tous les composants requis concaténés en une seule chaîne. Utilisez la fonction CONCAT d'Excel pour combiner les propriétés individuelles (ordre, préférence, drapeaux, service, expression régulière, remplacement de NAPTR ; priorité, poids, port, cible pour SRV) avant d'exporter au format JSON.

Si votre migration implique plus de 1 000 enregistrements, divisez le fichier JSON en lots et traitez chaque lot séparément pour respecter les limites de l'API Route 53. Lorsque vous utilisez l'UPSERTaction, chaque ResourceRecord élément compte deux fois dans le calcul du maximum de 1 000 éléments par demande. ChangeResourceRecordSets

Pièces jointes

Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip