Amazon Route 53 Private Hosted Zoneを異なるAWSアカウントに設定する
ども、大瀧です。
本日、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アカウントを分けているケースなどで上手く活用できると良いと思います。