4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Resource GatewayでInterface VPC Endpointを集約する

4
Last updated at Posted at 2026-09-07

はじめに

こんにちは。株式会社両備システムズの渋瀬です。
この記事は「2026 Japan AWS Jr. Champions 真夏のQiitaリレー」の39日目の記事となります。
過去の投稿(リンク集)はこちらからご覧ください。
2026 Japan AWS Jr. Champions 真夏のQiitaリレー:過去の投稿

2026年6月11日、AWS公式ブログでResource GatewayとResource Endpointを使ってInterface VPC Endpointを集約するアーキテクチャが紹介されました。

Interface VPC Endpointの集約自体は以前から可能でした。共有VPCにEndpointをまとめ、各VPCからTransit Gateway(TGW)やVPC Peeringを通して利用する方式です。

しかし、TGWには時間料金とデータ処理料金があり、TGWとVPC PeeringのどちらにもCIDR重複という悩みがあります。NLB、VPC Endpoint Service、Squidを組み合わせて回避する構成まで考えましたが、今度はプロキシの運用を抱えることになります。

そんな中で紹介されたのが、Resource GatewayによるInterface VPC Endpoint集約構成です。

そこで今回は、公式ブログの「Use case 4」を参考に、CIDRが重複する2つのVPCを用意し、TGW、VPC Peering、NAT Gatewayを使わずに、Consumer VPCのECS on Fargateから共有VPCのInterface VPC Endpointを利用できるか試しました。

1. 従来のVPC Endpoint集約方式と課題

なぜInterface VPC Endpointを集約したいのか

特に完全閉域を要求される環境において、Interface Endpointは必須となるサービスです。

しかし、Interface Endpointには、Endpoint数と配置するAvailability Zone(AZ)数に応じた時間料金がかかります。複数のVPCで同じAWSサービスを利用する場合、VPCごとにEndpointを作ると固定費と管理対象が増えていきます。

そこで、Interface Endpointを共有VPCへ集約するアーキテクチャが候補になります。

Transit Gatewayによる集約

Transit Gatewayを使ったInterface VPC Endpoint集約構成

共有VPCと各Consumer VPCをTGWへ接続し、共有VPCに作成したInterface Endpointへルーティングする方式です。

TGWは、VPC間通信、集中型NAT、Network Firewallなどもまとめられる汎用的なネットワークハブです。すでにTGWをネットワーク基盤として利用している環境なら、Interface Endpointの集約にも活用できます。

一方、目的がInterface Endpointの共有だけであれば、VPC Attachmentの時間料金とデータ処理料金が追加されます。コスト最適化のためにEndpointを集約したのに、別の固定費とデータ処理費が増える点は無視できません。

VPC Peeringによる集約

VPC Peeringを使ったInterface VPC Endpoint集約構成

VPC PeeringでConsumer VPCと共有VPCを直接接続する方式です。TGWの利用料金を避けられるため、VPC数が少ない場合には有力です。

Consumer VPCから通常のAWSサービスFQDNを利用するには、Route 53 Private Hosted ZoneとDNSレコードの設計も必要にはなりますが、AWS利用料のコスト最適化という観点では理にかなった対処に思えます。

両方式に残るCIDR重複問題

TGWとVPC Peeringは、どちらもVPC間のIPルーティングを前提とします。そのため、接続するVPCのCIDRが重複していると、そのままでは相互接続できません。

Interface Endpointを必要とする環境では、「インターネットを経由させず、閉域でAWSサービスへ接続したい」という要件も多くあります。ところが、組織内の全VPCだけでなく、オンプレミス、買収した企業、パートナー環境まで含めてCIDRの一意性を維持し続けるのは簡単ではありません。

方式 主なメリット 主な課題
TGW 多数のVPCやオンプレミス接続を一元管理できる Attachment・データ処理料金、CIDR重複
VPC Peering 小規模なら構成が単純でTGW料金がない 接続数の増加、非推移、CIDR重複、DNS管理

完全閉域のためにEndpointを集約したいのに、その前提として全ネットワークのCIDR調整が必要になる。これは運用管理の面で厳しいものがあります。

2. NLB+SquidでPrivateLink公開する案も考えた

CIDR重複を回避する方法として、次のような構成も考えました。

NLB、VPC Endpoint Service、Squidを使った集約案

Squidをフォワードプロキシとして動かし、NLBとVPC Endpoint Serviceを使って各Consumer VPCへPrivateLinkで公開する構成です。PrivateLinkであればVPC間の通常ルーティングを作らないため、CIDR重複を回避できます。

ただし、これはEndpointを共有するための仕組みを自分たちで運用する構成です。

  • Squidコンテナのアップデートと脆弱性対応
  • ECS Service、NLB、Target Groupの監視
  • スケーリングと可用性設計
  • プロキシ許可リストの管理
  • NLB、ECSの料金

さらに、すべてのクライアントがプロキシ接続先を自由に変更できるとは限りません。特にFargateがタスク起動時に行うECRイメージ取得は、アプリケーションコンテナ内の通信とは別に扱われます。

技術的には面白いものの、「Interface Endpointの運用を減らしたい」という目的に対し、新たなプロキシ基盤の運用を増やしてしまいます。この案は採用に至りませんでした。

3. Resource Gatewayによる集約構成が紹介された

Resource GatewayとResource Endpoint自体は、2024年12月にAWS PrivateLinkの機能として発表されました。

そして2026年6月のAWS公式ブログで、具体的な実装パターンの1つとして「TGWやVPC Peeringを経由せず、AWSサービス向けInterface Endpointを集約する構成」が紹介されました。

公式ブログでは「Use case 4: Centralizing the interface endpoints for AWS services without going over Transit Gateway or VPC peering」として説明されています。

Resource Gatewayを使ったInterface VPC Endpoint集約構成

構成要素

この構成では、次の4つを使用します。

リソース 役割
Resource Gateway 共有VPC内のリソースへ到達する入口
Resource Configuration 公開対象となるDNS名、IPアドレス、ARNなどの定義
Resource Configuration Group 複数のResource Configurationをまとめるグループ
Resource Endpoint Consumer VPCに配置する接続口

共有VPCにある各Interface EndpointのリージョナルDNS名をDNS型Resource Configurationとして登録し、それらを1つのGroupへまとめます。Consumer VPCは、そのGroupに関連付けたResource Endpointを1つ作成します。

Consumer VPC
  Fargate
     ↓
  Resource Endpoint(1つ)
     ↓
Shared Services VPC
  Resource Gateway
     ↓
  Resource Configuration Group
     ├─ ecr.api Interface Endpoint
     ├─ ecr.dkr Interface Endpoint
     └─ logs Interface Endpoint

VPC間の通常ルーティングを作らず、公開されたResourceだけへ接続するため、Consumer VPCと共有VPCのCIDRが重複していても利用できます。TGW AttachmentもVPC Peeringも不要です。

また、複数の子Resource ConfigurationをGroupへまとめることで、Consumer VPC側では1つのResource Endpointから複数のInterface Endpointを利用できます。

TGWを完全に置き換えるものではない

Resource GatewayはTGWの後継ではありません。TGWはネットワーク全体を接続する汎用ハブであり、Resource Gatewayは公開対象を特定のTCPリソースへ限定する仕組みです。

AWS公式ブログでも、Interface Endpoint集約が主目的なら、Resource EndpointはTGW Attachmentより全体の時間料金とデータ処理料金を抑えられる選択肢として紹介されています。ただし、Resource Gateway、Resource Configuration、Resource Endpoint側にも料金は発生するため、VPC数と通信量を使った比較が必要です。

4. 実際に作ってみた

では実際にAWSブログで紹介された構成をマネジメントコンソールから作っていきましょう。

今回の構成

今回構築したFargateとResource Gatewayの検証環境

項目 設定
Consumer VPC 10.0.0.0/20
Shared Services VPC 10.0.0.0/20
Consumer側ワークロード ECS on Fargate
Consumer側Gateway Endpoint S3を1つ
Shared側Interface Endpoint ecr.apiecr.dkrlogs

2つのVPCには、意図的に同じCIDRを設定しています。TGWやVPC Peeringではそのまま接続できない条件です。

4-1. 共有VPCにInterface Endpointを作る

共有VPCに次の3つを作成します。

com.amazonaws.ap-northeast-1.ecr.api
com.amazonaws.ap-northeast-1.ecr.dkr
com.amazonaws.ap-northeast-1.logs

Resource Configurationへ登録するのは、各Interface EndpointのリージョナルDNS名です。

vpce-<id>.api.ecr.ap-northeast-1.vpce.amazonaws.com
vpce-<id>.dkr.ecr.ap-northeast-1.vpce.amazonaws.com
vpce-<id>.logs.ap-northeast-1.vpce.amazonaws.com

公式ブログにもあるとおり、Resource Gatewayから解決できる公開DNS名を指定する必要があります。Interface EndpointのリージョナルDNS名は公開DNSで名前解決できますが、応答として返るのはEndpoint ENIのプライベートIPアドレスです。

4-2. Resource Gatewayを作る

共有VPCのプライベートサブネットにResource Gatewayを作成します。

Resource Gatewayの作成画面

項目 設定値
Resource Gateway名 test
IPアドレスタイプ IPv4
Resource設定 DNS解決タイプ パブリック
ENIごとのIPv4アドレス数 16
VPC Test-Provider-vpc

DNS解決タイプはパブリックを選択しました。ここでいうパブリックはDNSの参照先であり、通信がインターネットを経由するという意味ではありません。

セキュリティグループは、Resource GatewayからInterface EndpointへTCP 443で接続できるように設定します。今回の検証では、Interface Endpoint側でResource Gateway専用セキュリティグループからのInbound TCP 443を許可しました。

4-3. Resource Configuration Groupを作る

3つのInterface EndpointをまとめるResource Configuration Groupを作成します。

Resource Configuration Groupの作成画面

項目 検証環境の設定
名前 test
設定タイプ リソースグループ
プロトコル TCP
Resource Gateway test
Group Domain 未使用
ポート範囲 165535

検証環境では既存設定を使用したためポート範囲が広くなっていますが、今回必要なのはHTTPSだけです。本番環境ではTCP 443へ限定します。

4-4. 3つの子Resource Configurationを作る

Groupの詳細画面から、子Resource Configurationを追加します。

Resource Configuration Groupから子Resource Configurationを作成する画面

ECR API用の子Resource Configuration設定画面

設定タイプはリソース、タイプは、Resource TypeはDNSリソースです。Domain Nameには、手順4-1で確認したInterface EndpointのリージョナルDNS名を指定します。

子Resource Configuration Resource Definition
ECR API ecr.api EndpointのリージョナルDNS名
ECR DKR ecr.dkr EndpointのリージョナルDNS名
CloudWatch Logs logs EndpointのリージョナルDNS名

今回のGroupではCustom Domainを使用していません。

4-5. Consumer VPCにResource Endpointを1つ作る

Consumer VPCのプライベートサブネットに、TypeがResourceのVPC Endpointを1つ作り、Resource Configuration Groupへ関連付けます。

今回のGroupには3つの子Resource Configurationがありますが、Consumer VPC側のResource Endpointは1つです。

Resource EndpointのPrivate DNSは無効とし、各Resource Configuration Associationに発行されたDNS名を、次のRoute 53設定から参照します。

4-6. Consumer VPCのDNSを設定する

Fargateが利用するECRやCloudWatch Logsの接続先は任意のURLへ変更できません。そのため、通常のAWSサービスFQDNをResource Endpointの関連付けDNS名へ向ける必要があります。

最初は公式ブログのオプション例を参考に、ap-northeast-1.amazonaws.comという広いPrivate Hosted ZoneへECRとCloudWatch LogsのCNAMEを作成しました。

しかし、Fargateを起動すると次のエラーで停止しました。

CannotPullContainerError
lookup prod-ap-northeast-1-starport-layer-bucket.s3.ap-northeast-1.amazonaws.com: no such host

広いPrivate Hosted Zoneが、登録していないS3のDNS名まで権威的に覆っていたためです。ECRの認証とRegistryだけでなく、イメージレイヤー取得にはS3も使われることを見落としていました。

そこで広域Zoneを削除し、次のサービス別Private Hosted Zoneへ変更しました。

Private Hosted Zone レコード 転送先
ecr.ap-northeast-1.amazonaws.com api.ecr...のCNAME ECR APIのResource Association DNS
ecr.ap-northeast-1.amazonaws.com *.dkr.ecr...のCNAME ECR DKRのResource Association DNS
logs.ap-northeast-1.amazonaws.com Zone ApexのAlias A LogsのResource Association DNS

CloudWatch Logsの通常FQDNはPrivate Hosted ZoneのZone Apexになるため、CNAMEは配置できません。Resource Association DNSのHosted Zone IDを使い、Alias Aレコードを作成しています。

この方式なら、ECRとCloudWatch LogsだけをResource Endpointへ誘導し、S3など他のAWSサービスの名前解決へ影響を与えません。

S3のインターフェースエンドポイントをProvider VPCに作成すれば、AWSブログの構成(ap-northeast-1.amazonaws.comでPrivate Hosted Zoneを作る構成)でも可能でしょうが、それではS3のインターフェースエンドポイントも料金がかかる上、データ処理料金も発生するためAWS利用料の削減という観点では望ましくありません。

4-7. S3 Gateway Endpointを確認する

Consumer VPCには、次のS3 Gateway Endpointを作成し、Fargateを配置するプライベートサブネットのルートテーブルへ関連付けます。

com.amazonaws.ap-northeast-1.s3

S3 Gateway Endpointは時間料金とデータ処理料金がかかりません。一方、VPC PeeringやTGWを越えて共有できないため、Consumer VPCごとに必要です。

4-8. Nginxイメージを作ってFargateを起動する

検証用Nginxイメージをprivate ECRへPushし、NAT GatewayとPublic IPを持たないConsumer VPCのプライベートサブネットでFargateタスクを起動しました。

タスクは正常にRUNNINGとなり、CloudWatch Logsへのログ出力にも成功しました。

FargateタスクがRUNNINGになったことを確認

CloudWatch Logsへ出力されたNginxの起動ログ

5. まとめ

従来、Interface VPC Endpointを複数VPCで共有するには、TGWまたはVPC Peeringを使う構成が一般的でした。

しかし、TGWには時間料金とデータ処理料金があり、TGWとVPC PeeringのどちらもCIDR重複をそのまま扱えません。NLB、VPC Endpoint Service、Squidを組み合わせれば回避できる可能性はありますが、Endpoint集約のためにプロキシ基盤を自分たちで運用することになります。

Resource GatewayとResource Endpointを使う今回の構成では、次を確認できました。

  • Consumer VPCと共有VPCのCIDRが重複していても接続できる
  • 複数のInterface Endpointを、Consumer VPCの1つのResource Endpointから利用できる

一方で、DNS設計が不要になるわけではありません。通常のAWSサービスFQDNを使う場合はPrivate Hosted Zoneが必要であり、Zoneを広く取りすぎると、今回のS3のようにGroupへ登録していないAWSサービスの名前解決を壊します。

また、Resource GatewayはTGWの代替ではなく、特定のTCPリソースをConsumer側へ公開するための仕組みです。ネットワーク全体の接続が必要ならTGW、Interface Endpointなど限定したリソースの共有が目的ならResource Gateway、という使い分けになります。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?