この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ども、大瀧です。
本日、Route 53 Private Hosted Zoneが異なるAWSアカウントのVPCに紐付けできるようになりました。以前紹介した以下の記事のアップデートですね。
Route 53 Private Hosted Zoneとは
Route 53は、AWSの仮想ネットワークであるVPCにPrivate Hosted Zoneを紐付けることができます。VPC内部のリソースへの独自のホスト名付与や、VPC内部のEC2のみへの特定ドメインのDNS情報提供などで利用できます。同一アカウントのVPCであればRoute 53の管理画面から、以下のようにVPCを選択、紐付けします。
設定手順
異なるAWSアカウントのVPCにPrivate Hosted Zoneを紐付ける手順は、以下の通りです。
- Private Hosted Zoneを持つアカウントに対してCreateVPCAssociationAuthorization APIをコールする。
- 紐付けるVPCを持つアカウントに対してAssociateVPCWithHostedZone APIをコールする
いずれの手順も現時点ではAWS Management Console(Web管理画面)ではサポートされていません。AWS CLIや各種AWS SDKを利用しましょう。
1. CreateVPCAssociationAuthorization APIの呼び出し
前述の通り、Private Hosted Zoneを持つアカウントでVPCの紐付け許可を行います。aws route53 create-vpc-association-authorization
コマンドで実行します。
2017/02/09 AWS CLIがCreateVPCAssociationAuthorization APIをサポートしていたので、AWS CLIの手順を追加しました。
$ aws route53 create-vpc-association-authorization \
--hosted-zone-id XXXXXXXXXXXX \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-XXXXXXXX
$
これでOKです。
参考: AWS CLIを使わずにNode.jsでAPIを直接コールする(飛ばしてください)
Node.jsでAWS V4署名を簡単に行えるNodeモジュール( https://github.com/mhart/aws4 )を利用しました。
var http = require('http'),
https = require('https'),
aws4 = require('aws4')
var hostedZoneId = 'XXXXXXXXXXX';
var vpcId = 'vpc-XXXXXXXX';
var xml = '<?xml version="1.0" encoding="UTF-8"?>'
+ ' <CreateVPCAssociationAuthorizationRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/">'
+ ' <VPC>'
+ ' <VPCId>' + vpcId + '</VPCId>'
+ ' <VPCRegion>ap-northeast-1</VPCRegion>'
+ ' </VPC>'
+ '</CreateVPCAssociationAuthorizationRequest>';
request(aws4.sign({service: 'route53',
path: '/2013-04-01/hostedzone/' + hostedZoneId + '/authorizevpcassociation',
body: xml
}))
function request(o) { https.request(o, function(res) { res.pipe(process.stdout) }).end(o.body || '') }
mhart/aws4では、AWSのAPIキーを環境変数(AWS_ACCESS_KEY_ID
およびAWS_SECRET_ACCESS_KEY
)から読み込むのであらかじめ設定しておきましょう。
実行して以下のようにレスポンスが返ってくればOKです。
$ npm install aws4
(略)
$ node index.js
<?xml version="1.0"?>
<CreateVPCAssociationAuthorizationResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><HostedZoneId>XXXXXXXXXXXX</HostedZoneId><VPC><VPCRegion>ap-northeast-1</VPCRegion><VPCId>vpc-XXXXXXXX</VPCId></VPC></CreateVPCAssociationAuthorizationResponse>
2. AssociateVPCWithHostedZone APIの呼び出し
続いて、紐付けを行います。今度はVPCを持つAWSアカウントで作業することに注意しましょう。また、Private Hosted Zoneを設定するためにはVPCの以下2つの設定が有効になっていなければならないので、予め確認しておきましょう。
- DNS解決
- DNSホスト名
今回はAWS CLIのaws route53 associate-vpc-with-hosted-zone
コマンドで実行します。手順1とオプションが同じなのが面白いですねw
$ aws route53 associate-vpc-with-hosted-zone \
--hosted-zone-id XXXXXXXXXXXX \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-XXXXXXXX
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "",
"SubmittedAt": "2016-11-16T01:23:14.485Z",
"Id": "/change/C12P3FP58AOL2P"
}
}
こんな感じのレスポンスが返ってくればOKです。しばらく待ち、Private Hosted Zoneのプロパティを確認すると[Associated VPCs]に、紐付けたVPCが追加されていることが確認できます。
設定できてますね。
まとめ
Route 53 Private Hosted Zoneで異なるAWSアカウントのVPCに紐付ける方法をご紹介しました。開発と本番でAWSアカウントを分けているケースなどで上手く活用できると良いと思います。