はじめに
プライベートサブネットでAWSサービスに気軽に接続できるVPCエンドポイント。便利でも、維持が面倒くさい。エンドポイント自体の管理・セキュリティグループの管理、ENIの管理・・・色々管理の面倒くささもあるが、時間単位で料金がかかる(0.01USD/hなので月7.2USDも)のも何か腑に落ちない。
見積もり
この手法ではTransit Gatewayを使ってVPC間でVPCエンドポイントを共有する。Transit Gateway自体の値段はアタッチメントごとに0.05USD/hかかるので、2つのVPCでも、VPCエンドポイントの数が10以上ある場合はコスト優位になる。プライベートVPCにおけるFargateでは、最低4つVPCエンドポイントが必要(過去記事参照)なので、色んなサービスを閉域VPCで使い倒す場合は平気でエンドポイント数が10を超えるのではないかと思う。
今回やること
2つのVPC間でVPCエンドポイントを共有する。図中の番号は以降の手順の番号と同じ。
前提
- 2つのVPCと各VPCにプライベートサブネットが存在
- VPCエンドポイントは片方のプライベートサブネットに存在
- 今回の例ではSQSへのVPCエンドポイントとする
手順
Step1 VPCの準備
対象となるVPCにて「DNSホスト名が有効」であること、「DNS解決が有効」であることを確認する。この設定がないとRoute53プライベートホストゾーンがうまく働かないので注意。
Step2 VPCエンドポイントを作成する
Interface型のVPCエンドポイントを作成する。DNSはRoute53により設定するため、エンドポイントの設定で「DNS 名を有効」を設定しない。
Step3 TransitGatewayを作成する
Step4 TransitGatewayアタッチメントを作成する
設定するVPCのサブネットごとにTrangit Gateawayを紐づけるため、VPCごとにアタッチメントを作成する。「アプライアンスモードサポート」を有効にしておくと、後のルートテーブルの設定で手順が減る。アタッチメントモードはVPC間の接続なので「VPC」でよい。
Step5 TransitGatewayルートテーブルを作成する
作成したTrangit Gateawayルートテーブルを見ると、各VPCへのルートテーブルが作成されている。NATゲートウェイなどを共有する場合は、0.0.0.0/0
ヘのルートの設定が必要になるが、今回の場合では、ルートが正しく設定されていれば特に作業はない。
Step6 VPCとサブネットのルートテーブルを編集
Transit GatewayのルートテーブルはTrangit Gateawayの中でのルートテーブルでしかない。各VPCの通信がお互いのVPCのCIDR範囲に向くように、Trangit Gateawayをターゲットにルートテーブルを設定する。ここでサブネットの関連付けを行っておくと、サブネットにてVPCと別にルートテーブルを設定する作業が必要がなくなるので、関連付けておくと良い。
Step7 Route53にてプライベートホストゾーンを作成
作成したDNSエンドポイント名を確認し、DNSエンドポイント名に応じたドメイン名でプライベートホストゾーンを作成する。
- エンドポイントのDNS名:
vpce-0e70fb14223b3f28d-hxl4u56c.sqs.ap-northeast-1.vpce.amazonaws.com
-
設定するドメイン名:
sqs.ap-northeast-1.amazonaws.com
※vpce.
部分は必要ない。エンドポイントからコピペする時注意。
Aレコードを作成する。エイリアスを選ぶとVPCエンドポイントを選択できる。
最後の確認
ここまでの手順でVPCエンドポイントの共有が終わっているはずなので、EC2からエンドポイントの名前解決ができるか、AWS CLIコマンドが通るか確認する。
無事名前解決とAWS CLIコマンドが通っている。OK!
最後に
VPCエンドポイントの名前を明示的に指定する必要があるサービスといえば、プライベートAPIぐらいか。作った関数、アプリなどそのまま使えるのは非常にうれしいが、Trangit Gateawayは通信が無料なVPCピアリングと比べてしまうと割高に感じる。でも企業アカウントなどVPCを多く運用するようなパターンにおいては有用かな・・・。