View a markdown version of this page

Migrasikan catatan DNS secara massal ke zona host pribadi Amazon Route 53 - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Migrasikan catatan DNS secara massal ke zona host pribadi Amazon Route 53

Ram Kandaswamy, Amazon Web Services

Ringkasan

Pola ini mengotomatiskan migrasi massal catatan DNS ke zona yang dihosting Amazon Route 53. Ini menggunakan skrip Python dengan AWS SDK for Python (Boto3) untuk membaca data rekaman dari file JSON yang disimpan di Amazon Simple Storage Service (Amazon S3) dan membuat catatan secara terprogram dengan menggunakan Route 53 API.

Jika sistem sumber Anda mengekspor file zona BIND standar, fitur impor asli Route 53 atau cli53 (alat CLI sumber terbuka yang dikelola komunitas yang tidak berafiliasi dengan) dapat menangani migrasi AWS tanpa skrip khusus. Namun, di banyak lingkungan perusahaan, catatan DNS hidup di lembar kerja Excel daripada file zona. Ekspor Excel sering kali berisi masalah kualitas data seperti spasi yang tidak rusak dan karakter Unicode, yang tidak ditangani oleh alat impor standar. Pola ini membahas celah itu: ia membaca dari Excel dan membersihkan data untuk membuat catatan dari ujung ke ujung.

Gunakan pola ini saat Anda perlu memigrasikan sejumlah besar catatan DNS dari sistem yang ada ke zona yang dihosting Route 53 tanpa membuat setiap rekaman secara manual melalui konsol.

Prasyarat dan batasan

Prasyarat

Batasan

  • Pola ini tidak menggunakan semua properti panggilan change_resource_record_sets API yang tersedia. Perpanjang kode sesuai kebutuhan untuk kasus penggunaan Anda.

  • Di lembar kerja Excel, nilai di setiap baris diasumsikan unik. Beberapa nilai untuk setiap FQDN diharapkan muncul di baris yang sama. Jika bukan itu masalahnya, ubah kode untuk menggabungkan beberapa nilai untuk FQDN yang sama.

  • Pola ini memanggil Route 53 API secara langsung dengan menggunakan Boto3. Anda dapat meningkatkan kode untuk menggunakan AWS CloudFormation pembungkus untuk update_stack perintah create_stack dan dan menggunakan nilai JSON untuk mengisi sumber daya template.

  • Jika sistem sumber Anda dapat mengekspor catatan dalam format file zona BIND pertimbangkan untuk menggunakan fitur impor Route 53 sebagai gantinya.

  • Beberapa AWS layanan tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat AWSlayanan menurut Wilayah. Untuk titik akhir tertentu, lihat halaman titik akhir dan kuota Layanan, dan pilih tautan untuk layanan.

Arsitektur

  1. Pengguna mengunggah lembar kerja Excel dengan data rekaman DNS ke bucket Amazon S3.

  2. Skrip Python yang berjalan secara lokal (atau dalam IDE seperti Kiro) membaca file JSON dari bucket Amazon S3 dengan menggunakan Boto3.

  3. Skrip memproses catatan dan memanggil operasi change_resource_record_sets API Route 53 untuk membuat catatan di zona yang dihosting.

Alat

Layanan AWS

  • Route 53 - Menyediakan zona yang dihosting tempat catatan DNS dibuat. Pola ini menggunakan operasi create_hosted_zone dan change_resource_record_sets API.

  • Amazon S3 - Menyimpan file JSON yang berisi data catatan DNS untuk bermigrasi.

Alat lainnya

  • Kiro — IDE dengan kemampuan AI agen, digunakan untuk mengembangkan dan menjalankan skrip migrasi Python. Untuk informasi lebih lanjut, lihat Kiro.

  • panda — Pustaka analisis data Python, digunakan untuk mengonversi lembar kerja Excel ke format JSON.

Praktik terbaik

  • Uji dengan subset kecil dari 5-10 catatan sebelum Anda menjalankan skrip terhadap semua catatan untuk memverifikasi pemformatan data dan pembuatan rekaman yang benar.

  • Gunakan UPSERT tindakan alih-alihCREATE. UPSERTTindakan membuat catatan jika tidak ada atau memperbaruinya jika ada. Ini membuat skrip idempoten dan aman untuk dijalankan kembali.

  • Batch perubahan Anda agar tetap berada dalam batas ChangeResourceRecordSets permintaan. Saat Anda menggunakan UPSERT tindakan, setiap ResourceRecord elemen dihitung dua kali menuju maksimum 1.000 elemen.

  • Validasi data sebelum penyisipan. Verifikasi bahwa FQDNS diakhiri dengan periode (.), bahwa nilai TTL adalah bilangan bulat positif, dan bahwa jenis rekaman cocok dengan jenis catatan DNS yang didukung.

  • Cadangkan catatan yang ada sebelum Anda membuat perubahan massal. Ekspor catatan zona yang dihosting saat ini dengan menggunakan list_resource_record_sets untuk memberikan titik rollback.

  • Terapkan logika coba lagi dengan backoff eksponensial untuk menangani batas laju API Route 53. Untuk informasi selengkapnya, lihat Error retries dan exponential backoff di. AWS

  • Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat Memberikan hak istimewa terkecil dan praktik terbaik Keamanan dalam dokumentasi AWS Identity and Access Management (IAM).

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat file Excel untuk catatan Anda.

  1. Ekspor catatan dari sistem DNS Anda saat ini.

  2. Buat lembar kerja Excel dengan kolom ini:FqdnName,, RecordTypeValue,TTL.

  3. Untuk catatan NAPTR dan SRV, gunakan fungsi CONCAT Excel untuk menggabungkan beberapa nilai properti ke dalam kolom. Value

  4. Verifikasi bahwa setiap FQDN berakhir dengan periode (.) dan bahwa nilai TTL adalah bilangan bulat positif.

Contoh baris:

FqdnName

RecordType

Nilai

TTL

something.example.org

A

192.0.2.1

900

Insinyur data

Konversi data lembar kerja Excel ke JSON.

  1. Verifikasi bahwa Python 3.12 atau yang lebih baru diinstal dengan menjalankan python3 --version di terminal.

  2. Instal perpustakaan panda dengan menjalankan pip3 install pandas --user di terminal.

  3. Buat file Python dengan kode berikut untuk mengonversi lembar kerja Excel ke JSON:

import pandas as pd data=pd.read_excel('./Book1.xls') data.to_json(path_or_buf='my.json',orient='records')
  1. Jalankan penulisan. Verifikasi bahwa file output my.json berisi catatan yang diharapkan.

Insinyur data, pengembang Python

Unggah file JSON ke bucket Amazon S3.

  1. Buat bucket Amazon S3 jika belum ada. Untuk informasi selengkapnya, lihat Membuat bucket di dokumentasi Amazon S3.

  2. Unggah my.json file ke ember.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Membuat zona yang di-hosting.

  1. Buat file Python dengan kode berikut untuk membuat zona yang dihosting. Ganti <hosted-zone-name><vpc-region>,, dan <vpc-id> dengan nilai-nilai Anda.

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. Jalankan skrip dan catat ID zona yang dihosting dari respons.

Anda juga dapat menggunakan alat infrastruktur sebagai kode (IAc) seperti AWS CloudFormation untuk mengganti langkah-langkah ini dengan template yang membuat tumpukan dengan sumber daya dan properti yang sesuai. Untuk informasi selengkapnya, lihat AWS Route 53:: HostedZone dalam CloudFormation dokumentasi.

Arsitek cloud, administrator Jaringan, keterampilan Python

Baca data JSON dari Amazon S3.

  1. Gunakan kode ini untuk membaca dari bucket Amazon S3 dan memuatnya sebagai kamus 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. Verifikasi yang json_content berisi catatan yang diharapkan dengan mencetak beberapa entri pertama.

Pengembang aplikasi, pengembang Python

Bersihkan nilai data dan masukkan catatan.

  1. Gunakan kode ini untuk membersihkan nilai data dan menyisipkan catatan ke zona yang dihosting. Ganti <hosted-zone-id> dengan ID dari zona host yang dikonfigurasi sebelumnya.

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. Pantau kesalahan pada output. Jika pelambatan terjadi, tingkatkan penundaan atau terapkan backoff eksponensial.

Pengembang aplikasi, keterampilan Python

Pemecahan masalah

IsuSolusi

PriorRequestNotComplete kesalahan

Tambahkan time.sleep() penundaan 1-2 detik di antara change_resource_record_sets panggilan. Proses Route 53 berubah secara asinkron, dan perubahan sebelumnya mungkin masih berlangsung.

InvalidChangeBatch kesalahan

Kesalahan ini terjadi ketika Anda mencoba membuat catatan yang sudah ada dengan menggunakan CREATE tindakan. Gunakan UPSERT sebagai gantinya untuk membuat skrip idempoten.

Kesalahan pelambatan (batas tarif terlampaui)

Anda telah melampaui lima permintaan API per detik. Terapkan backoff eksponensial dengan jitter. Untuk informasi selengkapnya, lihat Error retries dan exponential backoff di. AWS

Rekaman tidak diselesaikan

Verifikasi bahwa VPC dikaitkan dengan zona yang dihosting dan resolusi DNS diaktifkan pada VPC. Keduanya enableDnsSupport dan enableDnsHostnames harus diatur ketrue.

InvalidInputkesalahan pada nilai catatan

Data berisi spasi (\xa0) atau leading/trailing spasi kosong yang tidak pecah. Terapkan kode pembersihan data dari tugas “Bersihkan nilai data dan sisipkan catatan” sebelum penyisipan.

Sumber daya terkait

Referensi

Tutorial dan video

Desain DNS menggunakan Amazon Route 53 (video)

Informasi tambahan

Untuk catatan NAPTR dan SRV, Value bidang di lembar kerja Excel harus berisi semua komponen yang diperlukan digabungkan menjadi satu string. Gunakan fungsi CONCAT Excel untuk menggabungkan properti individual (urutan, preferensi, bendera, layanan, regexp, penggantian NAPTR; prioritas, berat, port, target untuk SRV) sebelum mengekspor ke JSON.

Jika migrasi Anda melibatkan lebih dari 1.000 catatan, pisahkan file JSON menjadi beberapa batch dan proses setiap batch secara terpisah agar tetap berada dalam batas API Route 53. Saat Anda menggunakan UPSERT tindakan, setiap ResourceRecord elemen dihitung dua kali menuju maksimum 1.000 elemen per permintaan. ChangeResourceRecordSets

Lampiran

Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip