[Boto3 Adv-Cal DAY15]Route53Domainsでドメインの移行確認をやってみた
boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。
boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけで完結できるように検証していくことが目的になります。
15日目はRoute53Domainsにてドメインの移行確認操作をやってみます。
目次
boto3を通してRoute53Domainsでできること
ドキュメントは下記リンク先です。
ざっくりと以下のことができます。
- ドメイン名が有効であるかの確認
- ドメイン名をAmazon Route53へ移行可能かどうかの確認
対象リージョン
Route53DomainsのAPI動作リージョンが限定されていたため、今回はus-east-1に直接指定しています。
Route53の扱い
AWS管理コンソール上でのドメインに関する扱いはRoute53の中にすべて収められていますが、boto3上では夫々機能毎に分類が行われています。
- Route53
- Route53 Domains
- Route53 Resolver
Route53
Hostやレコード、ヘルスチェックを主に行います。
Route53 Domains
ドメイン名の有効確認、及び移行チェック。
Route53 Resolver
オンプレミスからVPCの名前解決が可能になります。
今回の手順
既存のドメインがRoute53へ移行可能かどうかを確認します。
- 対象ドメインの指定
- 移行可能チェック
実行手順
% python main.py Input Profile name [default]>> Input domain name >> XXXXXXXXXXXX.net {'ResponseMetadata': {'HTTPHeaders': {'content-length': '53', 'content-type': 'application/x-amz-json-1.1', 'date': 'XXX, XX XXX 2018 21:43:49 GMT', 'x-amzn-requestid': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'}, 'HTTPStatusCode': 200, 'RequestId': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'RetryAttempts': 0}, 'Transferability': {'Transferable': 'UNTRANSFERABLE'}}
main.py
import boto3 from pprint import pprint class Route53DomainsWizard: _client_name = 'route53domains' _session = None _domain_name = None def __init__(self, profile_name): self._session = boto3.Session(profile_name=profile_name, region_name='us-east-1') @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 domain_name(self): return self._domain_name def check_domain_transferability(self): params = { 'DomainName': self.domain_name } return self.get_client().check_domain_transferability(**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_domain_name(self): self._domain_name = self.prompt_base('Input domain name') @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 = Route53DomainsWizard(profile_name) wizard.prompt_domain_name() pprint(wizard.check_domain_transferability()) if __name__ == '__main__': Route53DomainsWizard.prompt()
まとめ
入力精査も兼ねたために、移行チェック処理としては若干コード量が多くなってしまいました。既存ドメインを管理する際に移行チェックも併せて行う場合等であれば、恐らく実装量も少ない上に役立つと思われます。