Route53 Profilesで簡単にVPCエンドポイントを共有する
はじめに
Route53 Profilesで共有するリソースにVPCエンドポイントが追加されました!
先日、以下の記事にてマルチアカウントにおけるRoute53で使える便利なサービスとしてRoute53 Profilesを紹介しました。
VPC Endpointを別のVPCで共有するのはちょっと大変だったこれは嬉しいアップデートです。
本記事では従来のプロセスを示したうえで、Route53 Profilesを使うとどのようにしてVPCエンドポイントを共有することができるか実際に構築してみます。
従来の方法
Interface型のVPCエンドポイントはDNSによって、各サービス宛のトラフィックをVPCエンドポイントに向けることで、PrivateLink経由でサービスのAPIにアクセスします。
トラフィックは以下のようなイメージです。
クライアントからRoute53 Resolver→Private Hosted Zoneの経路を辿って名前解決を行います。
マルチアカウント×ハイブリッドクラウド構成におけるRoute53 p12
VPCエンドポイント作成時に、以下のオプション(プライベートDNS名を有効化する)にチェックすることでPrivate Hosted Zoneの作成、VPCへの関連付けが行われます。
そのため、VPCエンドポイントを複数のVPCで共有するには、Private Hosted Zoneを共有し、アクセス元のVPCに関連付けしてあげる必要があります。
クロスアカウントでPrivate Hosted Zoneを利用するためのフローは以下の通りです。
マネコンではできないうえ、RAMとも連携できないので1つ1つ共有する必要があり、なかなか骨が折れます。
マルチアカウント×ハイブリッドクラウド構成におけるRoute53 p8
Route53 Profilesを使った方法
実際にやってみた
以下の構成できちんと疎通できるか試してみました。
共有前の動作確認
client-vpc上のCloudShellから「aws s3 ls」コマンドで疎通確認をします。
Route53からはグローバルIPが返却され、インターネット向きの口はないのでアクセスはできませんでした。
Routeクエリログ
{
"version": "1.100000",
"region": "ap-northeast-1",
"vpc_id": "vpc-06bd499ea5b62c4c2",
"query_timestamp": "2025-04-30T11:36:26Z",
"query_name": "s3.ap-northeast-1.amazonaws.com.",
"query_type": "A",
"query_class": "IN",
"rcode": "NOERROR",
"answers": [
{
"Rdata": "3.5.156.213",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "52.219.152.48",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "3.5.157.133",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "52.219.162.240",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "52.219.162.68",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "3.5.157.137",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "3.5.159.1",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "52.219.198.44",
"Type": "A",
"Class": "IN"
}
],
"srcaddr": "10.1.131.229",
"srcport": "38389",
"transport": "UDP",
"srcids": {
"instance": "i-0e2326ff0b72656f7"
}
}
VPCエンドポイントの作成
まずはendpoint-vpcにVPCエンドポイントを作成します。
先ほど、自動作成されるPrivate Hosted Zoneは共有できないとお伝えしたばかりですが、Route53 Profilesを利用する際は、問題なく共有できるのでチェックを入れて作成します。
エンドポイントID「vpce-05858fd7bd23b6964」のVPCエンドポイントが作成されました。
Route53 Profilesの作成
次にRoute53 Profilesの構築です。
まずProfileを作成し、「VPC エンドポイント」タブから「関連付ける」をクリックします。
先ほど作成したVPCエンドポイント(vpce-05858fd7bd23b6964)を選択し、「関連付ける」をクリックします。
RAMによる共有
続いてクロスアカウントでRoute53 Profilesを共有するために、RAMを操作します。
まず「リソース共有を作成」をクリックし、
リソース共有の名前を設定して、リソースの種類から「ルート53プロファイル」を選択します。
次に共有先を選択します。
今回は同じOrganizationsに所属しているアカウントなので、組織を選択して共有します。
リソースの共有が作成された後、共有先アカウントで共有されていることを確認します。
Route53 ProfilesをVPCに関連付ける
共有先アカウント側でRoute53 ProfilesにVPCを関連付けます。
操作はVPCエンドポイントを関連付けた際とほぼ同じです。
「VPC」タブから「関連付ける」をクリックします。
関連付け先のVPCを選択し、「関連付ける」をクリックします。
以上で構築は完了です。
疎通確認してみましょう。
疎通確認
最後に疎通確認です。
無事にclient-vpcからS3にアクセスすることができました。
クエリログ上も「10.0.143.147」とendpoint-vpcのIPが返却されていることがわかります。
Route53 クエリログ
{
"version": "1.100000",
"region": "ap-northeast-1",
"vpc_id": "vpc-06bd499ea5b62c4c2",
"query_timestamp": "2025-04-30T12:00:56Z",
"query_name": "s3.ap-northeast-1.amazonaws.com.",
"query_type": "A",
"query_class": "IN",
"rcode": "NOERROR",
"answers": [
{
"Rdata": "10.0.143.147",
"Type": "A",
"Class": "IN"
}
],
"srcaddr": "10.1.131.229",
"srcport": "36817",
"transport": "UDP",
"srcids": {
"instance": "i-0e2326ff0b72656f7"
}
}
注意事項
Route53 Profilesは便利な一方、コストも発生するので注意が必要です。
Route 53 プロファイルでは、AWS リージョンの 1 つのアカウントで作成されたプロファイルに関連するプロファイルと VPC の関連付けが 100 個まで、1 つの AWS アカウントあたり 1 時間あたりの料金は 0.75 USD です。最初の 100 のアソシエーションを超えると、AWS リージョンごとにプロファイルと VPC のアソシエーション 1 時間あたり 0.0014 USD の料金がかかります。 最初の 100 件のプロファイルと VPC の関連付けの基本階層の時間単価には、AWS リージョンの AWS アカウントが所有するすべてのプロファイルの関連付けが含まれます。
まとめ
Route53 Profilesは大規模環境において非常に便利なサービスだと認識していましたが、VPCエンドポイントをサポートしたことでさらに有用度が上がりました。
実装も非常に簡単なので、コスト見合いで利用してみてはいかがでしょうか。
Discussion