[Boto3 Adv-Cal DAY12]Route53でDNSレコードを設定してみた
boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。12日目はRoute53にてDNSレコードの設定をやってみました。
boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。
boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけで完結できるように検証していくことが目的になります。
12日目はRoute53でDNSレコードの作成をやってみました。
目次
boto3を通してRoute53でできること
ドキュメントは下記リンク先です。
ざっくりと以下のことができます。
- hosted_zoneの操作(作成・削除)
- レコードの変更
- ヘルスチェック
今回の操作
HostedZoneを作成し、レコードを追加します。今回はALIASに限定しています。
- HostedZoneの作成
- レコードの追加
% python main.py Input Profile name [default]>> Input hosted_zone name >> XXXXXXX.com Input resource >> 172.0.0.1
main.py
import boto3 import datetime import re from pprint import pprint class Route53Wizard: _client_name = 'route53' _session = None _hosted_zone_name = None _resource = None def __init__(self, profile_name): self._session = boto3.Session(profile_name=profile_name) @property def session(self): return self._session def get_client(self, client_name=None): if not client_name: client_name = self._client_name return self.session.client(client_name) @property def client_name(self): return self._client_name @property def resource(self): return self._resource @property def hosted_zone_name(self): return self._hosted_zone_name def create_hosted_zone(self): params = { 'Name': self.hosted_zone_name, 'CallerReference': str(datetime.datetime.now().timestamp()), } return self.get_client().create_hosted_zone(**params) def create_record_set(self, host): params = { 'HostedZoneId': host['HostedZone']['Id'], 'ChangeBatch': { 'Changes': [ { 'Action': 'CREATE', 'ResourceRecordSet': { 'Name': host['HostedZone']['Name'], 'Type': 'A', 'TTL': 3600, 'ResourceRecords': [ { 'Value': self.resource } ] } } ] } } return self.get_client().change_resource_record_sets(**params) def prompt_base(self, message): value = None while True: value = input("\n{} >> ".format(message)) if value and len(value) != 0: break return value def prompt_hosted_zone_name(self): self._hosted_zone_name = self.prompt_base('Input hosted_zone name') def prompt_resource(self): self._resource = self.prompt_base('Input resource') @staticmethod def prompt(): default_profile_name = 'default' profile_name = input('Input Profile name [{}]>> '.format(default_profile_name)) if len(profile_name) == 0: profile_name = default_profile_name wizard = Route53Wizard(profile_name) wizard.prompt_hosted_zone_name() wizard.prompt_resource() host = wizard.create_hosted_zone() wizard.create_record_set(host) if __name__ == '__main__': Route53Wizard.prompt()
まとめ
今回は検証を手早く済ませるために、パラメータ埋め込みで実施しました。
入力済みのレコードを一覧で取得することも可能なため、既に入力しているレコードを俯瞰確認する際にも便利だと思います。