0
0

boto3 list_resource_record_setsの罠

Posted at

概要

業務にて、AWSのマルチリージョンフェイルオーバーを検証中
フェイルオーバー時に使用するDNSレコードの重みを変換するスクリプト内にてboto3のlist_resource_record_sets()を利用していたのですが、不要なレコードまで引っ張ってきてしまっていたので仕様を紐解きます。

list_resource_record_sets()の仕様

list_resource_record_sets()は、検索条件が指定できるものの、あくまでOR条件での検索になります。
検索条件は以下です(公式Docより引用: https://boto3.amazonaws.com/v1/documentation/api/1.26.88/reference/services/route53/client/list_resource_record_sets.html)

response = client.list_resource_record_sets(
    HostedZoneId='string',
    StartRecordName='string',
    StartRecordType='SOA'|'A'|'TXT'|'NS'|'CNAME'|'MX'|'NAPTR'|'PTR'|'SRV'|'SPF'|'AAAA'|'CAA'|'DS',
    StartRecordIdentifier='string',
    MaxItems='string'
)

OR条件で検索後、条件に最も合致しているレコードが上位にソートされる仕様になっています。(最大300アイテム)
一見するとAND条件での検索に見えるため注意が必要です。

対応

シンプルですが、ターゲットのレコード名以外を弾く処理にしました。
Route53から引っ張ってきたNameは後半に"."が追加されている点も注意が必要です。

# 対象のレコード以外は処理終了
if record_set["Name"] != f"{record_name}.":
    continue

まとめ

当初検証用に新設したアカウントで実行しており、他レコードがなく上記仕様に気づいておりませんでした。本番アカウントで実行中に気付き、幸いことなきを得ましたが冷や汗をかきました。。。
みなさまもお気をつけください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0