R53 でドメインを作成するコマンドラインを Ruby で書いた。

使い方 $ ruby create_record -d ドメイン名 [-h ホスト名] ex) ruby create_record -d google.com -h rarara -d ドメイン名、だけを指定すると、新規に hosted zone を作成し、 Aレコードと MXレコードを作成する。 -h ホスト名、も付けると、そのドメインの下に Aレコードと MXレコードを作成する。

コード require 'rubygems' require 'aws-sdk' require 'optparse'

AWS.config( access_key_id: ‘xxxxxxxxxxxxxxxxxxxxx’, secret_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’ ) IP=’xxx.xxx.xxx.xxx’

def create_record domain, host = nil

r53 = AWS::Route53.new zone = r53.hosted_zones.select { |z| z.name == “#{domain}.” }.first

host1 = host ? “#{host}.#{domain}.” : “#{domain}.” host2 = host ? “www.#{host}.#{domain}.” : “www.#{domain}”

r53.client.change_resource_record_sets( hosted_zone_id: zone.id, change_batch: { changes: [ { action: ‘UPSERT’, resource_record_set: { name: host1, type: ‘A’, ttl: 300, resource_records: [ value: IP ] } }, { action: ‘UPSERT’, resource_record_set: { name: host2, type: ‘A’, ttl: 300, resource_records: [ value: IP ] } }, { action: ‘UPSERT’, resource_record_set: { name: host1, type: ‘MX’, ttl: 300, resource_records: [ value: “10 #{host1}” ] } }, ] } ) end

def create_hosted_zone domain r53 = AWS::Route53.new resp = r53.client.create_hosted_zone({ name: “#{domain}.”, caller_reference: domain }) puts “Name servers:” for ns in resp[:delegation_set][:name_servers] puts ns end create_record domain end

options = {}

OptionParser.new do |opts| opts.banner = ‘Usage: create_record [options]’ opts.on(‘-h [HOST]’, ‘–host [HOST]’, ‘hostname’) do |v| options[:host] = v end opts.on(‘-d [DOMAIN]’, ‘–domain [DOMAIN]’, ‘domain’) do |v| options[:domain] = v end end.parse!

if options[:host] create_record options[:domain], options[:host] else create_hosted_zone options[:domain] end </code>