search
LoginSignup
5

More than 5 years have passed since last update.

posted at

Route53のChangeResourceRecordSetsに追加されたUPSERTを試す

【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に入るとより便利そうではある。

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
What you can do with signing up
5