はじめに
AWSのroute53にpythonでレコード追加する機会があったのでその方法を書いておきます。
Boto3のインストール
pythonでAWSを操作するときはBoto3というライブラリを使うのでpipまたはpip3でインストールしましょう。
pip3 install boto3
AWSでAPIキーの発行
AWSを操作するためにはアクセスIDとシークレットアクセスキーが必要なのでまずはこれらを発行していきましょう。
まずはAWSコンソールにログインして右上のユーザー名のメニューをクリックしてセキュリティ認証情報を選択してください。
今回はセキュリティ的に新しいユーザーを作成しそのユーザーのアクセスキーを発行するため左側のユーザーを選択してください。
そして右上のユーザーを追加を押したらユーザー名を入力します。
AWS認証情報タイプの選択のところは今回はpythonを使うので上の「アクセスキー – プログラムによるアクセス」を選択して次の画面に行きます。
次の画面に行ったら「アクセス許可の設定」を「既存のポリシーを直接アタッチ」にして下の検索欄に「route53」と入力し「AmazonRoute53FullAcccess」を選択して次のステップへ
今回は特にtagを追加しないのでそのまま確認へ
特に間違っているところがなければユーザーの作成をしましょう
ユーザーが作成されたらアクセスキーIDとシークレットアクセスキーが発行されるのでCSVをダウンロードしておきましょう。
実際にコードを書く
まずは初期化処理をしていきます。
import boto3
client = boto3.client('route53',
aws_access_key_id='********************',
aws_secret_access_key='****************************************'
)
基本的にはこのように書くのですが環境変数を使用することもできます。
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYを設定してあげれば省略して書くことができます。
#上の続き
response = client.change_resource_record_sets(
HostedZoneId='********************',
ChangeBatch={
'Changes': [
{
'Action': 'CREATE',
'ResourceRecordSet': {
'Name': 'example.com',
'Type': 'A',
'TTL': 3600,
'ResourceRecords': [
{
'Value': '0.0.0.0'
},
],
}
},
]
}
)
print(response)
ex:Aレコード0.0.0.0を追加するなら上のコードでできます。
各詳細を下にまとめておいたので応用に使ってください。
#上の続き
response = client.change_resource_record_sets(
HostedZoneId='string',
ChangeBatch={
'Comment': 'string',
'Changes': [
{
'Action': 'CREATE'|'DELETE'|'UPSERT',
'ResourceRecordSet': {
'Name': 'string',
'Type': 'SOA'|'A'|'TXT'|'NS'|'CNAME'|'MX'|'NAPTR'|'PTR'|'SRV'|'SPF'|'AAAA'|'CAA'|'DS',
'SetIdentifier': 'string',
'Weight': 123,
'Region': 'us-east-1'|'us-east-2'|'us-west-1'|'us-west-2'|'ca-central-1'|'eu-west-1'|'eu-west-2'|'eu-west-3'|'eu-central-1'|'ap-southeast-1'|'ap-southeast-2'|'ap-southeast-3'|'ap-northeast-1'|'ap-northeast-2'|'ap-northeast-3'|'eu-north-1'|'sa-east-1'|'cn-north-1'|'cn-northwest-1'|'ap-east-1'|'me-south-1'|'ap-south-1'|'af-south-1'|'eu-south-1',
'GeoLocation': {
'ContinentCode': 'string',
'CountryCode': 'string',
'SubdivisionCode': 'string'
},
'Failover': 'PRIMARY'|'SECONDARY',
'MultiValueAnswer': True|False,
'TTL': 123,
'ResourceRecords': [
{
'Value': 'string'
},
],
'AliasTarget': {
'HostedZoneId': 'string',
'DNSName': 'string',
'EvaluateTargetHealth': True|False
},
'HealthCheckId': 'string',
'TrafficPolicyInstanceId': 'string',
'CidrRoutingConfig': {
'CollectionId': 'string',
'LocationName': 'string'
}
}
},
]
}
)
print(response)
上のものが基本の構文です。一つ一つ解説していきます。
- HostedZoneId(string型)[REQUIRED]:ホストゾーンIDはAWSコンソールで確認できます。string型で指定してください。
- ChangeBatch(disk型)[REQUIRED]:コメントとチェンジの内容が入った辞書型
- Comment(string型):コメントです。
- Chenges(list型)[REQUIRED]:レコードの変更内容をlist型で書きます。
- Action(string型)[REQUIRED]:CREATE(作る!),DELETE(消す!),UPSERT(存在しなかったら作る!存在するなら変更!)から選択してください。
- ResourceRecordSet(dist型)[REQUIRED]:作成、削除、更新の情報をdict型で記載する。
- Name(string型)[REQUIRED]:名前!!
- Type(string型)[REQUIRED]:A,AAAA,CAA,CNAME,DS,MX,NAPTR,NS,PTR,SOA,SPF,SRV,TXTの中から選択してください。(流石にtypeの内容は自分で調べてください)
- SetIdentifier(string型):多分ルーティングのタイプ??あんま詳しくないです。ごめんなさい
- Weight(int型):重み付け
- Region(string型):リージョンを選択
- GeoLocation(dist型):場所を辞書型で指定
- Failover(string型):PRIMARY,SECONDARYから選ぶ!
- MulutValueAnswer(bool型):TrueかFalse!!
- TTL(int型):TTLをint型で指定
- ResourceRecords(list型):操作対象のレコード情報
- (dict型)
- Value(string型)[REQUIRED]
- (dict型)
- AliasTarget(dict型):エイリアスターゲットを辞書型で指定
- HostedZoneId(string型)[REQUIRED]:ホストゾーンID?
- DNSName(string型)[REQUIRED]:DNSネームをstr型で指定
- EvaluateTargetHealth(boolean型)[REQUIRED]:TureかFalseで指定
- HealthCheckId(string型):ヘルスチェックIDをstr型で指定
- TrafficPolicyInstanceld(string型):トラフィックポリシーインスタンスIDをstr型で指定
- CidrRoutingConfig(dict型):リソースレコードセットをCIDRロケーションにリンクする際に、リソースレコードセットオブジェクトに指定されるオブジェクト。
- CollectionId(string型)[REQUIRED]:CIDR コレクション ID
- LocationName(string型)[REQUIRED]:CIDR コレクションの場所の名前
疲れた…