(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【AWS/Route53】Pythonで特定のAレコードのIPアドレスを変更する

スポンサーリンク

やりたいこと

Lambda関数にてRoute 53に登録してあるドメインのAレコードを変更する。

環境情報
  • Python 3.2

やり方

変更したい

  • Hosted zone ID
  • Record name

を確認し、IPアドレスをValue欄に入力を行い実行する。

import boto3
AWS_HOST_ZONE_ID="XX"
AWS_RECORD_NAME="XX"
r53 = boto3.client('route53')
def lambda_handler(event, context):
    response = r53.change_resource_record_sets(
        HostedZoneId=AWS_HOST_ZONE_ID,
        ChangeBatch={
            'Changes': [
                {
                    'Action': 'UPSERT',
                    'ResourceRecordSet': {
                        'Name': AWS_RECORD_NAME,
                        'Type': 'A',
                        'TTL': 300, 
                        'ResourceRecords': [
                            {
                                'Value': "X.X.X.X"
                            },
                        ],
                    }
                },
            ]
        }
        )

Lambdaより正常に実行が行われると"Execution results”にResponseがnullとなった上で正常にIPアドレス変更がされている。

以下、補足です。

補足

Lambda関数からRoute 53の操作を行うため、事前にLambda側に権限付与を行う必要があります。
注意が必要な点として、同プログラムを動かすとRoute 53上の設定は即座に反映されますが、実機上はキャッシュによって古いIPアドレスが名前解決される可能性があります。

デフォルトではキャッシュの時間が300秒(5分)となっているので、要件として許容できない場合はRoute 53側で設定を短くして対応します。
このキャッシュの残り時間はdigコマンドのANSWER SECTIONで確認できます。

# dig hogehoge

; <<>> DiG 9.16.42-RH <<>> hogehoge
...
;; ANSWER SECTION:
hogehoge.     293     IN      A       X.X.X.X
...


以上、ご参考ください。