JavaScriptでドメインを取得する(AWS SDKのRoute53Domainsを使ってみる)


なんのこっちゃらという感じですが、そういうことです。

AWS SDK for JavaScriptに"Route53Domains"というものがありまして、どうやらこれを使うとRoute53でドメインが取得できそうな気配です。

「どうせならドメイン取得も自動でやっちゃいたいよね！」ってことでやってみました。

##書いたコード
```
var AWS = require('aws-sdk');
	var route53domains = new AWS.Route53Domains({
		apiVersion: '2014-05-15',
		accessKeyId: "YOUR_AWS_ACCESS_KEY_ID",
		secretAccessKey: "YOUR_AWS_SECRET_ACCESS_KEY",
		region: "REGION" #省くと怒られる。（いらないはずだけど）
	});

	var contact = {
	  AddressLine1: 'YOUR_ADDRESS_LINE1',
	  AddressLine2: 'YOUR_ADDRESS_LINE2',
	  City: 'YOUR_CITY_NAME',
	  ContactType: 'COMPANY',
	  CountryCode: 'JP',
	  Email: 'hoge@example.jp',
	  FirstName: 'YOUR_FIRST_NAME',
	  LastName: 'YOUR_LAST_NAME',
	  OrganizationName: 'YOUR_COMPANY_NAME',
	  ZipCode: '600-0000',
	  PhoneNumber : '+81.700000000'
	};

	var params = {
	  AdminContact: contact,
	  DomainName: 'YOUR_DOMAIN',
	  DurationInYears: 1,
	  RegistrantContact: contact,
	  TechContact: contact,
	  AutoRenew: false, #ここをTRUEにすると自動更新されるっぽい
	  PrivacyProtectAdminContact: true,
	  PrivacyProtectRegistrantContact: true,
	  PrivacyProtectTechContact: true
	};

	route53domains.registerDomain(params, function(err, data) {
	  if (err) console.log(err, err.stack); // an error occurred
	  else     console.log(data);           // successful response
	});

```
横着して

- AdminContact
- RegistrantContact
- TechContact

の３つを同じにしていますが、規模の大きい会社などではそれぞれちゃんと書いた方がいいと思います。


##実行結果
以下のようなJSONが返ってきたら発注成功です。

```
$ node register_domain.js 
{ OperationId: '81aXXX-XXXX-XXXf26c5998' }
```

マネージドコンソールからRoute53を見ると、承認待ちになっているのがわかります。
![スクリーンショット 2016-06-01 17.54.25.png](https://qiita-image-store.s3.amazonaws.com/0/23936/7dba02cc-7971-36b2-2edb-978fa25e6e2a.png "スクリーンショット 2016-06-01 17.54.25.png")

##確認メールをみる
以下のような確認メールが来てるので、リンクをクリックしましょう。
![Verification_of_your_contact_data_-_hide_okamoto_digitalcube_jp_-_株式会社デジタルキューブ_メール.png](https://qiita-image-store.s3.amazonaws.com/0/23936/4b7d5cb8-f237-2d39-b66e-124453d18be3.png "Verification_of_your_contact_data_-_hide_okamoto_digitalcube_jp_-_株式会社デジタルキューブ_メール.png")

クリックするとこうなります。

![Email_address_verification.png](https://qiita-image-store.s3.amazonaws.com/0/23936/9e659a51-2d07-1285-c474-d8c764ab42b8.png "Email_address_verification.png")

ここまでやると、「No further action is required on your part.」というメールが来ます。

５〜１０分程度待機すると、以下のようにドメインの登録が完了します。

![スクリーンショット 2016-06-01 18.06.46.png](https://qiita-image-store.s3.amazonaws.com/0/23936/e6213e0d-6adc-cd4a-6242-fbf693de975b.png "スクリーンショット 2016-06-01 18.06.46.png")

JavaScriptでドメイン取得もできるなんて、すごい世の中になりましたね。。

ドキュメントを見る限りドメイン移管や更新・解約もできる様子なので、また時間を見てトライしてみます。

Route53Domains:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Route53Domains.html

ちなみにPythonのAWS SDKにもRoute53Domainsはあるみたいなので、Python使いな方は是非トライしてみてください。
https://boto3.readthedocs.io/en/latest/reference/services/route53domains.html


##[余談]怒られたやつ
###電話番号のフォーマットは「'+81.079999999'」

+ 先頭に国番号（日本は+81）を付けます
+ 後ろの電話番号は、先頭の0を省略します
+ 国番号と電話番号「.」でつなぎます
+ ハイフンつけると怒られます


```
$ node register_domain.js 
{ [InvalidInput: Errors: [ Invalid Phone number [+81.70-999-9999].]]
  message: 'Errors: [ Invalid Phone number [+81.70-999-9999].]',
  code: 'InvalidInput',
  time: Wed Jun 01 2016 17:46:34 GMT+0900 (JST),
  requestId: '58XXX-XXX-XXX-XXX-abXXXXX32',
  statusCode: 400,
  retryable: false,
  retryDelay: 91.30285501014441 }
```

###'HYOGO' is not required for Japan and should not be set
日本は「State」いらないらしい

```
$ node register_domain.js 
{ [TLDRulesViolation: [ADMIN.STATE: 'HYOGO' is not required for Japan and should not be set, OWNER.STATE: 'HYOGO' is not required for Japan and should not be set, TECH.STATE: 'HYOGO' is not required for Japan and should not be set, BILL.STATE: 'HYOGO' is not required for Japan and should not be set]]
  message: '[ADMIN.STATE: \'HYOGO\' is not required for Japan and should not be set, OWNER.STATE: \'HYOGO\' is not required for Japan and should not be set, TECH.STATE: \'HYOGO\' is not required for Japan and should not be set, BILL.STATE: \'HYOGO\' is not required for Japan and should not be set]',
  code: 'TLDRulesViolation',
  time: Wed Jun 01 2016 17:46:48 GMT+0900 (JST),
  requestId: '6090d3b7-2XXX-1XXXX6-XXX-dXXXX67a9',
  statusCode: 400,
  retryable: false,
  retryDelay: 64.79505992028862 }
```