【AWS発表】Route 53の新機能 - ヘルスチェック機能が改良されHTTPS経由でも可能に。レコード修正APIもアップデート。 にあるようにレコード修正APIが追加されたので、それを試してみます。
ただし、ruby-sdk を利用します。
早速ですが、以下のような感じ。
require 'aws-sdk'
hosted_zone_id = 'XXXXXXXXXXXXX'
name = "foo.sample.com."
type = 'A'
ttl = 60
ip = '127.0.0.1'
r53 = AWS::Route53.new
r53.client.change_resource_record_sets(
:hosted_zone_id => hosted_zone_id,
:change_batch => {
:changes => [
{
:action => 'UPSERT',
:resource_record_set => {
:name => name,
:type => type,
:ttl => ttl,
:resource_records => [
{
:value => ip
}
]
}
}
]
}
)
これで、レコードがすでに存在すれば更新され、なければ作成されます。
今までだと以下のコードのように存在チェックをして、処理を分けて書く必要があったのが1つの処理でかけて良いです。
hosted_zone = AWS::Route53::HostedZone.new(hosted_zone_id)
rrset = hosted_zone.rrsets[name, type]
if rrset.exists?
# ここではipを変更すると想定
rrset.resource_records = [{:value => ip}]
rrset.update
else
hosted_zone.rrsets.create(name, type, :ttl => ttl, :resource_records => [{:value => ip}])
end
change_resource_record_setsを直接使うのじゃなく、今後UPSERTに対応したメソッドなりがruby-sdkに入るとより便利そうではある。