この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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()
まとめ
今回は検証を手早く済ませるために、パラメータ埋め込みで実施しました。
入力済みのレコードを一覧で取得することも可能なため、既に入力しているレコードを俯瞰確認する際にも便利だと思います。