この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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()
まとめ
入力精査も兼ねたために、移行チェック処理としては若干コード量が多くなってしまいました。既存ドメインを管理する際に移行チェックも併せて行う場合等であれば、恐らく実装量も少ない上に役立つと思われます。