4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

4
5
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
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?