Migrasikan data 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 data DNS secara massal ke zona host pribadi Amazon Route 53

Ram Kandaswamy, Amazon Web Services

Ringkasan

Insinyur jaringan dan administrator cloud memerlukan cara yang efisien dan sederhana untuk menambahkan catatan Domain Name System (DNS) ke zona yang dihosting pribadi di Amazon Route 53. Menggunakan pendekatan manual untuk menyalin entri dari lembar kerja Microsoft Excel ke lokasi yang sesuai di konsol Route 53 membosankan dan rawan kesalahan. Pola ini menjelaskan pendekatan otomatis yang mengurangi waktu dan upaya yang diperlukan untuk menambahkan beberapa catatan. Ini juga menyediakan serangkaian langkah yang dapat diulang untuk beberapa pembuatan zona yang dihosting.

Pola ini menggunakan Amazon Simple Storage Service (Amazon S3) untuk menyimpan catatan. Untuk bekerja dengan data secara efisien, pola menggunakan format JSON karena kesederhanaan dan kemampuannya untuk mendukung kamus Python dict (tipe data).

catatan

Jika Anda dapat membuat file zona dari sistem Anda, pertimbangkan untuk menggunakan fitur impor Route 53 sebagai gantinya.

Prasyarat dan batasan

Prasyarat

Batasan

  • Pola tidak memberikan cakupan yang luas untuk semua skenario kasus penggunaan. Misalnya, panggilan change_resource_record_sets tidak menggunakan semua properti API yang tersedia.

  • Di lembar kerja Excel, nilai di setiap baris diasumsikan unik. Beberapa nilai untuk setiap nama domain yang memenuhi syarat (FQDN) diharapkan muncul di baris yang sama. Jika itu tidak benar, Anda harus memodifikasi kode yang disediakan dalam pola ini untuk melakukan penggabungan yang diperlukan.

  • Pola ini menggunakan AWS SDK for Python (Boto3) untuk memanggil layanan Route 53 secara langsung. Anda dapat menyempurnakan kode untuk menggunakan CloudFormation pembungkus AWS untuk update_stack perintah create_stack dan, dan menggunakan nilai JSON untuk mengisi sumber daya template.

Arsitektur

Tumpukan teknologi

  • Route 53 zona host pribadi untuk merutekan lalu lintas

  • Amazon S3 untuk menyimpan file JSON output

Alur kerja untuk memigrasi catatan DNS secara massal ke zona host pribadi Route 53.

Alur kerja terdiri dari langkah-langkah ini, seperti yang diilustrasikan dalam diagram sebelumnya dan dibahas di bagian Epik:

  1. Unggah lembar kerja Excel yang memiliki informasi kumpulan rekaman ke bucket S3.

  2. Buat dan jalankan skrip Python yang mengonversi data Excel ke format JSON.

  3. Baca catatan dari bucket S3 dan bersihkan datanya.

  4. Buat kumpulan rekaman di zona host pribadi Anda.

Alat

  • Route 53 - Amazon Route 53 adalah layanan web DNS yang sangat tersedia dan dapat diskalakan yang menangani pendaftaran domain, perutean DNS, dan pemeriksaan kesehatan.

  • Amazon S3 - Amazon Simple Storage Service (Amazon S3) Simple Storage Service adalah layanan penyimpanan objek. Anda dapat menggunakan Amazon S3 untuk menyimpan dan mengambil data sebanyak apa pun kapan pun, dari mana pun di web.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat file Excel untuk catatan Anda.

Gunakan catatan yang Anda ekspor dari sistem Anda saat ini untuk membuat lembar kerja Excel yang memiliki kolom yang diperlukan untuk catatan, seperti nama domain yang sepenuhnya memenuhi syarat (FQDN), jenis rekaman, Waktu untuk Hidup (TTL), dan nilai. Untuk catatan NAPTR dan SRV, nilainya adalah kombinasi dari beberapa properti, jadi gunakan concat metode Excel untuk menggabungkan properti ini.

FqdnName

RecordType

Nilai

TTL

something.example.org

A

1.1.1.1

900

Insinyur data, keterampilan Excel

Verifikasi lingkungan kerja.

Di IDE Anda, buat file Python untuk mengonversi lembar kerja input Excel ke format JSON. (Alih-alih IDE, Anda juga dapat menggunakan SageMaker notebook Amazon untuk bekerja dengan kode Python.)

Verifikasi bahwa versi Python yang Anda gunakan adalah versi 3.7 atau yang lebih baru.

python3 --version

Instal paket panda.

pip3 install pandas --user
AWS Umum

Ubah data lembar kerja Excel ke JSON.

Buat file Python yang berisi kode berikut untuk dikonversi dari Excel ke JSON.

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

di mana Book1 adalah nama lembar kerja Excel dan my.json merupakan nama file JSON keluaran.

Insinyur data, keterampilan Python

Unggah file JSON ke bucket S3.

Unggah my.json file ke bucket S3. Untuk informasi selengkapnya, lihat Membuat bucket di dokumentasi Amazon S3.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat zona host pribadi.

Gunakan create_hosted_zone API dan kode contoh Python berikut untuk membuat zona host pribadi. Ganti parameterhostedZoneName,vpcRegion, dan vpcId dengan nilai Anda sendiri.

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)

Anda juga dapat menggunakan alat infrastruktur sebagai kode (IAc) seperti AWS CloudFormation untuk mengganti langkah-langkah ini dengan templat yang membuat tumpukan dengan sumber daya dan properti yang sesuai.

Arsitek cloud, administrator Jaringan, keterampilan Python

Ambil detail sebagai kamus dari Amazon S3.

Gunakan kode berikut untuk membaca dari bucket S3 dan untuk mendapatkan nilai JSON sebagai kamus 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)

dimana json_content berisi kamus Python.

Pengembang aplikasi, keterampilan Python

Bersihkan nilai data untuk spasi dan karakter Unicode.

Sebagai langkah pengamanan untuk memastikan kebenaran data, gunakan kode berikut untuk melakukan operasi strip pada nilai dijson_content. Kode ini menghapus karakter spasi di bagian depan dan akhir setiap string. Hal ini juga menggunakan replace metode untuk menghapus hard (non-breaking) spasi (\xa0karakter).

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() }
Pengembang aplikasi, keterampilan Python

Sisipkan catatan.

Gunakan kode berikut sebagai bagian dari for loop sebelumnya.

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

Di xxxxxxx mana ID zona yang dihosting dari langkah pertama epik ini.

Pengembang aplikasi, keterampilan Python

Sumber daya terkait

Referensi

Tutorial dan video