

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
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## Zusammenfassung
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

Dieses Muster automatisiert die Massenmigration von DNS-Einträgen in eine von Amazon Route 53 gehostete Zone. Es verwendet ein Python-Skript mit dem AWS SDK für Python (Boto3), um Datensatzdaten aus einer in Amazon Simple Storage Service (Amazon S3) gespeicherten JSON-Datei zu lesen und die Datensätze mithilfe der Route 53-API programmgesteuert zu erstellen.

Wenn Ihr Quellsystem standardmäßige BIND-Zonendateien exportiert, kann die native Importfunktion von Route 53 oder [cli53](https://github.com/barnybug/cli53) (ein von der Community verwaltetes Open-Source-CLI-Tool, zu dem nicht gehört AWS) die Migration ohne benutzerdefiniertes Scripting durchführen. In vielen Unternehmensumgebungen befinden sich DNS-Einträge jedoch eher in Excel-Arbeitsblättern als in Zonendateien. Excel-Exporte enthalten häufig Datenqualitätsprobleme wie geschützte Leerzeichen und Unicode-Zeichen, die mit Standard-Importtools nicht behoben werden können. Dieses Muster behebt diese Lücke: Es liest aus Excel und bereinigt die Daten, sodass durchgehend Datensätze erstellt werden.

Verwenden Sie dieses Muster, wenn Sie eine große Anzahl von DNS-Einträgen von einem vorhandenen System in eine Route 53-Hosting-Zone migrieren müssen, ohne jeden Eintrag manuell über die Konsole erstellen zu müssen.

## Voraussetzungen und Einschränkungen
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Ein Excel-Arbeitsblatt, das Datensätze für gehostete Zonen mit Spalten für den vollqualifizierten Domainnamen (FQDN), den Datensatztyp, die Gültigkeitsdauer (TTL) und den Wert enthält
+ Python 3.12 oder höher (siehe [Python herunterladen](https://www.python.org/downloads/))
+ Die Pandas-Python-Bibliothek ist installiert () `pip3 install pandas`
+ Vertrautheit mit DNS-Eintragstypen wie A-, NAPTR- und SRV-Einträgen (siehe [Unterstützte](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html) DNS-Eintragstypen)
+ Vertrautheit mit der Sprache Python und ihren Bibliotheken

**Einschränkungen**
+ Dieses Muster verwendet nicht alle verfügbaren Eigenschaften des `change_resource_record_sets` API-Aufrufs. Erweitern Sie den Code nach Bedarf für Ihren Anwendungsfall.
+ Im Excel-Arbeitsblatt wird davon ausgegangen, dass der Wert in jeder Zeile eindeutig ist. Es wird erwartet, dass mehrere Werte für jeden FQDN in derselben Zeile erscheinen. Ist dies nicht der Fall, ändern Sie den Code, um mehrere Werte für denselben FQDN zu verketten.
+ Dieses Muster ruft die Route 53-API direkt mithilfe von Boto3 auf. Sie können den Code so erweitern, dass er einen AWS CloudFormation Wrapper für die `update_stack` Befehle `create_stack` und verwendet und die JSON-Werte zum Auffüllen von Vorlagenressourcen verwenden.
+ Wenn Ihr Quellsystem Datensätze im BIND-Zonendateiformat exportieren kann, sollten Sie stattdessen die Route 53-Importfunktion verwenden.
+ Einige AWS Dienste sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter AWS[Dienste nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie auf der Seite [Dienstendpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Dienst aus.

## Architektur
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>



![](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/e5c65fa5-346e-4a24-bddf-a523f30afa95.png)


1. Der Benutzer lädt ein Excel-Arbeitsblatt mit DNS-Datensatzdaten in einen Amazon S3 S3-Bucket hoch.

1. Ein Python-Skript, das lokal (oder in einer IDE wie Kiro) ausgeführt wird, liest die JSON-Datei mithilfe von Boto3 aus dem Amazon S3 S3-Bucket.

1. Das Skript verarbeitet die Datensätze und ruft den `change_resource_record_sets` Route-53-API-Vorgang auf, um Datensätze in der Hosting-Zone zu erstellen.

## Tools
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>

*AWS-Services*
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) — Stellt die gehostete Zone bereit, in der DNS-Einträge erstellt werden. Dieses Muster verwendet die `change_resource_record_sets` API-Operationen `create_hosted_zone` und.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) — Speichert die JSON-Datei, die die zu migrierenden DNS-Datensatzdaten enthält.

*Andere Tools*
+ **Kiro** — Eine IDE mit agentischen KI-Funktionen, die zur Entwicklung und Ausführung des Python-Migrationsskripts verwendet wird. [Weitere Informationen finden Sie unter Kiro.](https://kiro.dev/)
+ **pandas** — Eine Python-Datenanalysebibliothek, die verwendet wird, um das Excel-Arbeitsblatt in das JSON-Format zu konvertieren.

## Bewährte Methoden
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-best-practices"></a>
+ Testen Sie mit einer kleinen Teilmenge von 5—10 Datensätzen, bevor Sie das Skript für alle Datensätze ausführen, um die Datenformatierung zu überprüfen und die Datensatzerstellung zu korrigieren.
+ Verwenden Sie die `UPSERT` Aktion anstelle von. `CREATE` Die `UPSERT` Aktion erstellt einen Datensatz, falls er nicht existiert, oder aktualisiert ihn, falls dies der Fall ist. Dadurch ist das Skript idempotent und kann sicher erneut ausgeführt werden.
+ [Batch Sie Ihre Änderungen](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html#limits-api-requests-changeresourcerecordsets), um innerhalb der `ChangeResourceRecordSets` Anforderungslimits zu bleiben. Wenn Sie die `UPSERT` Aktion verwenden, zählt jedes `ResourceRecord` Element zweimal zum Maximum von 1.000 Elementen.
+ [Überprüfen Sie die Daten vor dem Einfügen](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html). Stellen Sie sicher, dass FQDNs mit einem Punkt (`.`) enden, dass TTL-Werte positive Ganzzahlen sind und dass die Eintragstypen mit den unterstützten DNS-Eintragstypen übereinstimmen.
+ Erstellen Sie eine [Sicherungskopie vorhandener Datensätze](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.list_resource_record_sets), bevor Sie Massenänderungen vornehmen. Exportieren Sie die aktuellen Datensätze der Hosting-Zone, indem Sie `list_resource_record_sets` die Option zur Bereitstellung eines Rollback-Punkts verwenden.
+ Implementieren Sie eine Wiederholungslogik mit exponentiellem Backoff, um die Route-53-API-Ratenbegrenzungen zu handhaben. Weitere Informationen finden Sie unter [Fehlerwiederholungen und exponentielles Backoff in. AWS](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)
+ Folgen Sie dem Prinzip der geringsten Rechte und gewähren Sie die für die Ausführung einer Aufgabe erforderlichen Mindestberechtigungen. Weitere Informationen finden Sie in der AWS Identity and Access Management (IAM-[) Dokumentation unter Gewährung der geringsten Rechte](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) und [bewährte Methoden zur Sicherheit](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html).

## Epen
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### Bereiten Sie Daten für die Automatisierung vor
<a name="prepare-data-for-automation"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Excel-Datei für Ihre Unterlagen. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html)Beispielzeile: [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Dateningenieur | 
| Konvertiert die Daten des Excel-Arbeitsblatts in JSON. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html)<pre>import pandas as pd<br /><br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Dateningenieur, Python-Entwickler | 
| Laden Sie die JSON-Datei in einen Amazon S3 S3-Bucket hoch. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | App-Developer | 
| FqdnName | RecordType | Wert | TTL | 
| something.example.org | A | 192.0.2.1 | 900 | 

### Fügen Sie Datensätze in die gehostete Zone ein
<a name="insert-records-into-the-hosted-zone"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine gehostete Zone. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html)<pre>import boto3<br />import random<br /><br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion': vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /><br /> print(response)</pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html)Sie können auch ein IaC-Tool (Infrastructure as Code) verwenden, AWS CloudFormation um diese Schritte durch eine Vorlage zu ersetzen, die einen Stack mit den entsprechenden Ressourcen und Eigenschaften erstellt. Weitere Informationen finden Sie HostedZone in der CloudFormation Dokumentation unter [AWS Route 53::](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-route53-hostedzone.html). | Cloud-Architekt, Netzwerkadministrator, Python-Kenntnisse | 
| Lesen Sie die JSON-Daten aus Amazon S3. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html)<pre>import json<br />import boto3<br /><br />s3_client = boto3.client('s3')<br />fileobj = s3_client.get_object(<br />    Bucket='<your-bucket-name>',<br />    Key='my.json'<br />)<br /><br />filedata = fileobj['Body'].read()<br />contents = filedata.decode('utf-8')<br />json_content = json.loads(contents)</pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | App-Entwickler, Python-Entwickler | 
| Datenwerte bereinigen und Datensätze einfügen. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html)<pre>import unicodedata<br />import time<br /><br />for item in json_content:<br />    fqn_name = unicodedata.normalize(<br />        "NFKD",<br />        item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip()<br />    )<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {'Value': item["Value"].replace('\xa0', '').strip()}<br /><br />    change_response = route53_client.change_resource_record_sets(<br />        HostedZoneId='<hosted-zone-id>',<br />        ChangeBatch={<br />            'Comment': 'Created by automation',<br />            'Changes': [<br />                {<br />                    'Action': 'UPSERT',<br />                    'ResourceRecordSet': {<br />                        'Name': fqn_name,<br />                        'Type': rec_type,<br />                        'TTL': item["TTL"],<br />                        'ResourceRecords': [res_rec]<br />                    }<br />                }<br />            ]<br />        }<br />    )<br /><br />    time.sleep(1)  # Delay to avoid PriorRequestNotComplete errors</pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | App-Entwickler, Python-Kenntnisse | 

## Fehlerbehebung
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| `PriorRequestNotComplete`-Fehler  | Fügen Sie eine `time.sleep()` Verzögerung von 1—2 Sekunden zwischen `change_resource_record_sets` Anrufen hinzu. Route 53 verarbeitet Änderungen asynchron, und eine vorherige Änderung ist möglicherweise noch im Gange. | 
| `InvalidChangeBatch`-Fehler | Dieser Fehler tritt auf, wenn Sie versuchen, mithilfe der `CREATE` Aktion einen Datensatz zu erstellen, der bereits vorhanden ist. Verwenden Sie `UPSERT` stattdessen, um das Skript idempotent zu machen. | 
| Drosselungsfehler (Ratenlimit überschritten)  | Sie haben fünf API-Anfragen pro Sekunde überschritten. Implementieren Sie exponentiellen Backoff mit Jitter. Weitere Informationen finden Sie unter [Error Retries](https://docs.aws.amazon.com/general/latest/gr/api-retries.html) and exponential backoff in. AWS | 
| Datensätze werden nicht aufgelöst | Stellen Sie sicher, dass die VPC der Hosting-Zone zugeordnet ist und dass die DNS-Auflösung auf der VPC aktiviert ist. Beides `enableDnsSupport` und `enableDnsHostnames` muss auf eingestellt sein. `true` | 
| `InvalidInput`Fehler bei den Datensatzwerten | Die Daten enthalten geschützte Leerzeichen (`\xa0`) oder leading/trailing Leerzeichen. Wenden Sie vor dem Einfügen den Datenbereinigungscode aus der Aufgabe „Datenwerte bereinigen und Datensätze einfügen“ an. | 

## Zugehörige Ressourcen
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**Referenzen**
+ [Erstellen von Datensätzen durch Importieren einer Zonendatei](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (Route 53-Dokumentation)
+ [create\_hosted\_zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53/client/create_hosted_zone.html) (Boto3-Dokumentation)
+ [change\_resource\_record\_sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53/client/change_resource_record_sets.html) (Boto3-Dokumentation)
+ [Unterstützte DNS-Eintragstypen (Route 53-Dokumentation)](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)
+ [Fehler bei Wiederholungsversuchen und exponentieller Backoff in AWS](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)

**Tutorials und Videos**

[DNS-Design mit Amazon Route 53](https://www.youtube.com/watch?v=example) (Video)

## Zusätzliche Informationen
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-additional"></a>

Bei NAPTR- und SRV-Datensätzen muss das `Value` Feld im Excel-Arbeitsblatt alle erforderlichen Komponenten enthalten, die zu einer einzigen Zeichenfolge verkettet sind. Verwenden Sie die CONCAT-Funktion von Excel, um die einzelnen Eigenschaften (Reihenfolge, Präferenz, Flags, Service, Regexp, Ersatz für NAPTR; Priorität, Gewicht, Port, Ziel für SRV) zu kombinieren, bevor Sie nach JSON exportieren.

Wenn Ihre Migration mehr als 1.000 Datensätze umfasst, teilen Sie die JSON-Datei in Batches auf und verarbeiten Sie jeden Stapel separat, um die API-Grenzwerte für Route 53 einzuhalten. Wenn Sie die `UPSERT` Aktion verwenden, wird jedes `ResourceRecord` Element zweimal auf das Maximum von 1.000 Elementen pro Anfrage angerechnet. `ChangeResourceRecordSets`

## Anlagen
<a name="attachments-a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9"></a>

[Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, laden Sie die folgende Datei herunter und entpacken Sie sie: attachment.zip](samples/p-attach/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/attachments/attachment.zip)