Migre DNS registros em massa para uma zona hospedada privada do Amazon Route 53 - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Migre DNS registros em massa para uma zona hospedada privada do Amazon Route 53

Criado por Ram Kandaswamy () AWS

Ambiente: produção

Tecnologias: Rede; CloudNative DevOps; Infraestrutura

AWSserviços: AWS Cloud9; Amazon Route 53; Amazon S3

Resumo

Engenheiros de rede e administradores de nuvem precisam de uma maneira eficiente e simples de adicionar registros do Sistema de Nomes de Domínio (DNS) às zonas hospedadas privadas no Amazon Route 53. Usar uma abordagem manual para copiar entradas de uma planilha do Microsoft Excel para locais apropriados no console do Route 53 é entediante e propenso a erros. Esse padrão descreve uma abordagem automatizada que reduz o tempo e o esforço necessários para adicionar vários registros. Ele também fornece um conjunto repetível de etapas para a criação de várias zonas hospedadas.

Esse padrão usa o AWS ambiente de desenvolvimento integrado Cloud9 IDE () para desenvolvimento e teste, e o Amazon Simple Storage Service (Amazon S3) para armazenar registros. Para trabalhar com dados de forma eficiente, o padrão usa o JSON formato devido à sua simplicidade e à capacidade de oferecer suporte a um dicionário Python (tipo de dict dados).

Observação: Se você puder gerar um arquivo de zona do seu sistema, considere usar o atributo de importação do Route 53 em vez disso.

Pré-requisitos e limitações

Pré-requisitos

  • Uma planilha do Excel que contém registros de zona hospedada privada

  • Familiaridade com diferentes tipos de DNS registros, como registro A, registro Name Authority Pointer (NAPTR) e SRV registro (consulte Tipos de DNS registro compatíveis)

  • Familiaridade com a linguagem Python e suas bibliotecas

Limitações

  • O padrão não oferece cobertura abrangente para todos os cenários de casos de uso. Por exemplo, a chamada change_resource_record_sets não usa todas as propriedades disponíveis do. API

  • Na planilha do Excel, o valor em cada linha é considerado exclusivo. Espera-se que vários valores para cada nome de domínio totalmente qualificado (FQDN) apareçam na mesma linha. Se isso não for verdade, você deve modificar o código fornecido nesse padrão para realizar a concatenação necessária.

  • O padrão usa o AWS SDK for Python (Boto3) para chamar diretamente o serviço Route 53. Você pode aprimorar o código para usar um AWS CloudFormation wrapper para os update_stack comandos create_stack e e usar JSON os valores para preencher os recursos do modelo.

Arquitetura

Pilha de tecnologia

  • Zonas hospedadas privadas do Route 53 para roteamento de tráfego

  • AWSIDECloud9 para desenvolvimento e teste

  • Amazon S3 para armazenar o arquivo de saída JSON

Fluxo de trabalho para migrar DNS registros em massa para uma zona hospedada privada do Route 53.

O fluxo de trabalho consiste nessas etapas, conforme ilustrado no diagrama anterior e discutido na seção Épicos:

  1. Faça upload de uma planilha do Excel que tenha as informações do conjunto de registros em um bucket do S3.

  2. Crie e execute um script Python que converta os dados do Excel em formato. JSON

  3. Leia os registros do bucket do S3 e limpe os dados.

  4. Crie conjuntos de registros em sua zona hospedada privada.

Ferramentas

  • Route 53 — O Amazon Route 53 é um serviço DNS web altamente disponível e escalável que lida com registro de domínio, DNS roteamento e verificação de saúde.

  • AWSCloud9 AWS — O Cloud9 oferece uma rica experiência de edição de código com suporte para várias linguagens de programação e depuradores de tempo IDE de execução, além de um terminal integrado. Ele contém um conjunto de ferramentas usadas para codificar, compilar, executar, testar e depurar software, e ajuda você a liberar software para a nuvem.

  • Amazon S3: o Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos. Você pode utilizar o Amazon S3 para armazenar e recuperar qualquer volume de dados, a qualquer momento, de qualquer lugar na web.

Épicos

TarefaDescriçãoHabilidades necessárias

Crie um arquivo Excel para seus registros.

Use os registros que você exportou do seu sistema atual para criar uma planilha do Excel que tenha as colunas necessárias para um registro, como nome de domínio totalmente qualificado (FQDN), tipo de registro, Tempo de vida (TTL) e valor. Para SRV registros NAPTR e, o valor é uma combinação de várias propriedades, portanto, use o concat método do Excel para combinar essas propriedades.

FqdnName

RecordType

Valor

TTL

something.example.org

A

1.1.1.1

900

Engenheiro de dados, habilidades em Excel

Verifique o ambiente de trabalho.

No AWS IDE Cloud9, crie um arquivo Python para converter a planilha de entrada do Excel em formato. JSON (Em vez do AWS Cloud9, você também pode usar um notebook da SageMaker Amazon para trabalhar com código Python.)

Verifique se a versão do Python que você está usando é a versão 3.7 ou superior.

python3 --version

Instale o pacote do pandas.

pip3 install pandas --user
Geral AWS

Converta os dados da planilha do Excel emJSON.

Crie um arquivo Python que contenha o código a seguir para converter do Excel para o. JSON

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

onde Book1 é o nome da planilha do Excel e my.json é o nome do JSON arquivo de saída.

Engenheiro de dados, habilidades em Python

Faça upload do JSON arquivo em um bucket do S3.

Faça upload do arquivo my.json em um bucket do S3. Para obter mais informações, consulte Criar um bucket na documentação do Amazon S3.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Crie uma zona hospedada privada.

Use o create_hosted_zone API e o código de exemplo do Python a seguir para criar uma zona hospedada privada. Substitua os valores dos parâmetros hostedZoneName, vpcRegion, e vpcId pelos seus próprios valores.

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)

Você também pode usar uma ferramenta de infraestrutura como código (IaC) AWS CloudFormation para substituir essas etapas por um modelo que cria uma pilha com os recursos e propriedades apropriados.

Arquiteto de nuvem, administrador de rede, habilidades em Python

Recupere detalhes como um dicionário do Amazon S3.

Use o código a seguir para ler do bucket do S3 e obter os JSON valores como um dicionário 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)

onde json_content contém o dicionário Python.

Desenvolvedor de aplicativos, habilidades em Python

Limpe os valores de dados para espaços e caracteres Unicode.

Como medida de segurança para garantir a exatidão dos dados, use o código a seguir para realizar uma operação de separação dos valores em json_content. Esse código remove os caracteres de espaço na frente e no final de cada string. Ele também usa o método replace para remover espaços rígidos (não quebráveis) (os caracteres \xa0).

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() }
Desenvolvedor de aplicativos, habilidades em Python

Inserir registros.

Use o código a seguir como parte do loop for anterior.

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

Onde xxxxxxx está o ID da zona hospedada desde a primeira etapa desse épico.

Desenvolvedor de aplicativos, habilidades em Python

Recursos relacionados

Referências

Tutoriais e vídeos