Massenmigrieren von DNS-Einträgen in eine private gehostete Zone von Amazon Route 53 - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Massenmigrieren von DNS-Einträgen in eine private gehostete Zone von Amazon Route 53

Erstellt von Ram Kandaswamy (AWS)

Umgebung: Produktion

Technologien: Netzwerke CloudNative; DevOps; Infrastruktur

AWS-Dienste: AWS Cloud9; Amazon Route 53; Amazon S3

Übersicht

Netzwerktechniker und Cloud-Administratoren benötigen eine effiziente und einfache Möglichkeit, DNS-Einträge (Domain Name System) zu privaten Hosting-Zonen in Amazon Route 53 hinzuzufügen. Das manuelle Kopieren von Einträgen aus einem Microsoft Excel-Arbeitsblatt an die entsprechenden Stellen in der Route 53 53-Konsole ist mühsam und fehleranfällig. Dieses Muster beschreibt einen automatisierten Ansatz, der den Zeit- und Arbeitsaufwand für das Hinzufügen mehrerer Datensätze reduziert. Es bietet auch eine wiederholbare Reihe von Schritten für die Erstellung mehrerer gehosteter Zonen.

Dieses Muster verwendet die integrierte Entwicklungsumgebung (IDE) von AWS Cloud9 für Entwicklung und Tests und Amazon Simple Storage Service (Amazon S3) zum Speichern von Datensätzen. Um effizient mit Daten zu arbeiten, verwendet das Muster aufgrund seiner Einfachheit und der Fähigkeit, ein Python-Wörterbuch (dictDatentyp) zu unterstützen, das JSON-Format.

Hinweis: Wenn Sie eine Zonendatei von Ihrem System aus generieren können, sollten Sie stattdessen die Route 53 53-Importfunktion verwenden.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein Excel-Arbeitsblatt, das private, gehostete Zoneneinträge enthält

  • Vertrautheit mit verschiedenen Typen von DNS-Einträgen wie A-Eintrag, NAPTR-Datensatz (Name Authority Pointer) und SRV-Eintrag (siehe Unterstützte DNS-Eintragstypen)

  • Vertrautheit mit der Sprache Python und ihren Bibliotheken

Einschränkungen

  • Das Muster deckt nicht alle Anwendungsszenarien umfassend ab. Beispielsweise verwendet der Aufruf change_resource_record_sets nicht alle verfügbaren Eigenschaften der API.

  • Im Excel-Arbeitsblatt wird davon ausgegangen, dass der Wert in jeder Zeile eindeutig ist. Es wird erwartet, dass mehrere Werte für jeden vollqualifizierten Domänennamen (FQDN) in derselben Zeile erscheinen. Wenn das nicht der Fall ist, sollten Sie den in diesem Muster bereitgestellten Code ändern, um die erforderliche Verkettung durchzuführen.

  • Das Muster verwendet das AWS-SDK SDK for Python (Boto3), um den Route 53-Service direkt aufzurufen. Sie können den Code so erweitern, dass er einen CloudFormation AWS-Wrapper für die update_stack Befehle create_stack und verwendet und die JSON-Werte zum Auffüllen von Vorlagenressourcen verwenden.

Architektur

Technologie-Stack

  • Route 53 private gehostete Zonen für die Weiterleitung des Datenverkehrs

  • AWS Cloud9 IDE für Entwicklung und Test

  • Amazon S3 zum Speichern der JSON-Ausgabedatei

Workflow für die Massenmigration von DNS-Einträgen in eine private gehostete Route 53 53-Zone.

Der Workflow besteht aus den folgenden Schritten, wie im vorherigen Diagramm dargestellt und im Abschnitt Epics beschrieben:

  1. Laden Sie ein Excel-Arbeitsblatt mit den Datensatzinformationen in einen S3-Bucket hoch.

  2. Erstellen Sie ein Python-Skript, das die Excel-Daten in das JSON-Format konvertiert, und führen Sie es aus.

  3. Lesen Sie die Datensätze aus dem S3-Bucket und bereinigen Sie die Daten.

  4. Erstellen Sie Datensätze in Ihrer privaten gehosteten Zone.

Tools

  • Route 53 — Amazon Route 53 ist ein hochverfügbarer und skalierbarer DNS-Webservice, der die Domainregistrierung, das DNS-Routing und die Zustandsprüfung übernimmt.

  • AWS Cloud9 — AWS Cloud9 ist eine IDE, die umfangreiche Funktionen zur Codebearbeitung mit Unterstützung für mehrere Programmiersprachen und Runtime-Debugger sowie einem integrierten Terminal bietet. Es enthält eine Sammlung von Tools, die Sie verwenden, um Software zu codieren, zu erstellen, auszuführen, zu testen und zu debuggen, und Ihnen hilft, Software in der Cloud zu veröffentlichen.

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) ist ein Objektspeicherservice. Mit Amazon S3 können Sie jederzeit beliebige Mengen von Daten von überall aus im Internet speichern und aufrufen.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Excel-Datei für Ihre Unterlagen.

Verwenden Sie die Datensätze, die Sie aus Ihrem aktuellen System exportiert haben, um ein Excel-Arbeitsblatt zu erstellen, das die erforderlichen Spalten für einen Datensatz enthält, z. B. den vollqualifizierten Domänennamen (FQDN), den Datensatztyp, die Gültigkeitsdauer (TTL) und den Wert. Bei NAPTR- und SRV-Datensätzen ist der Wert eine Kombination aus mehreren Eigenschaften. Verwenden Sie daher die concat Excel-Methode, um diese Eigenschaften zu kombinieren.

FqdnName

RecordType

Wert

TTL

something.example.org

A

1.1.1.1

900

Dateningenieur, Excel-Kenntnisse

Überprüfen Sie die Arbeitsumgebung.

Erstellen Sie in der AWS Cloud9 Cloud9-IDE eine Python-Datei, um das Excel-Eingabearbeitsblatt in das JSON-Format zu konvertieren. (Anstelle von AWS Cloud9 können Sie auch ein SageMaker Amazon-Notebook verwenden, um mit Python-Code zu arbeiten.)

Stellen Sie sicher, dass die von Ihnen verwendete Python-Version Version 3.7 oder höher ist.

python3 --version

Installieren Sie das Pandas-Paket.

pip3 install pandas --user
Allgemeines AWS

Konvertiert die Excel-Arbeitsblattdaten in JSON.

Erstellen Sie eine Python-Datei, die den folgenden Code für die Konvertierung von Excel nach JSON enthält.

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

wobei Book1 der Name des Excel-Arbeitsblatts und der Name der JSON-Ausgabedatei my.json steht.

Dateningenieur, Python-Kenntnisse

Laden Sie die JSON-Datei in einen S3-Bucket hoch.

Laden Sie die Datei my.json zu einem S3-Bucket hoch. Weitere Informationen finden Sie unter Bucket erstellen in der Amazon S3 S3-Dokumentation.

App-Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine private gehostete Zone.

Verwenden Sie die API create_hosted_zone und den folgenden Python-Beispielcode, um eine private gehostete Zone zu erstellen. Ersetzen Sie die Parameter und vpcId durch hostedZoneName Ihre vpcRegion eigenen Werte.

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)

Sie können auch ein IaC-Tool (Infrastructure as Code) wie AWS verwenden, CloudFormation um diese Schritte durch eine Vorlage zu ersetzen, die einen Stack mit den entsprechenden Ressourcen und Eigenschaften erstellt.

Cloud-Architekt, Netzwerkadministrator, Python-Kenntnisse

Rufen Sie Details als Wörterbuch von Amazon S3 ab.

Verwenden Sie den folgenden Code, um aus dem S3-Bucket zu lesen und die JSON-Werte als Python-Wörterbuch abzurufen. 

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)

wo json_content enthält das Python-Wörterbuch.

App-Entwickler, Python-Kenntnisse

Saubere Datenwerte für Leerzeichen und Unicode-Zeichen.

Verwenden Sie als Sicherheitsmaßnahme zur Sicherstellung der Richtigkeit der Daten den folgenden Code, um eine Operation mit den Werten in durchzuführenjson_content. Dieser Code entfernt die Leerzeichen am Anfang und Ende jeder Zeichenfolge. Außerdem wird die replace Methode verwendet, um harte (geschützte) Leerzeichen (die \xa0 Zeichen) zu entfernen.

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() }
App-Entwickler, Python-Kenntnisse

Fügen Sie Datensätze ein.

Verwenden Sie den folgenden Code als Teil der vorherigen for Schleife.

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

Wo xxxxxxx ist die Hosting-Zonen-ID aus dem ersten Schritt dieses Epos?

App-Entwickler, Python-Kenntnisse

Zugehörige Ressourcen

Referenzen

Tutorials und Videos