0
1

複数アカウントのエンドポイントを1つに集約してコスト削減したい

Posted at

:wrench:課題

AWSを使うにあたって、コスト削減は永遠の課題です。
現在のプロジェクトでエンドポイントの料金が高すぎて非常に困っていました。
しかも複数アカウントを使っての開発のためさらに料金がかさみます。
この状況を打開すべくエンドポイントの集約を行いました:bangbang:

やること

最初に全体の流れを説明します。
ここでは便宜的に、エンドポイントの存在するVPCを「EP-VPC」・エンドポイントを利用したいVPCを「Target-VPC」と記載します。

① EP-VPCに利用したいエンドポイントを作成
② EP-VPCとTarget-VPCをピアリング接続(TransitGatewayでも可能ですが、今回はピアリングで行います)
③ 各VPCのルートテーブルにピアリング先との通信を許可
④ エンドポイントのセキュリティグループにてTarget-VPCからのインバウントを許可
⑤ EP-VPCにプライベートホストゾーンを作成
⑥ エンドポイントのDNSを指すAレコードを作成
⑦ プライベートホストゾーンをTarget-VPCに関連付けを行う

構成図.png

手順はこのようなかんじです。
では順にやっていきます!:fist:

1.EP-VPCに利用したいエンドポイントを作成する

今回はX-Ray用のエンドポイントを作っていきます。
image-1.png

:warning: 注意点としては、追加設定タブ内の「DNS名の有効化」のチェックを外すようにしてください。
ここが有効になっていると、AWS側で自動的にプライベートホストゾーンをVPCに関連付けるようで、手順5が実施できなくなります。
image-2.png

後は任意のVPC・サブネット・セキュリティグループを指定すればOKです

2.EP-VPCとTarget-VPCをピアリング接続する

次にVPCをピアリング接続します。
リクエスタとアクセプタがありますが、どっちのVPCでも構いません。とにかく2つのVPCが繋がればOKです!
image-3.png

作成後、アクセプタ側で「リクエストの承諾」をお忘れなく・・・

3.各VPCのルートテーブルにピアリング先との通信を許可

ここでは、エンドポイントへの通信がちゃんとルーティングされるようにルートテーブルを設定します。
例えば、各VPCのCidrが以下の場合

  • EP-VPC:10.0.0.0/16
  • Target-VPC:172.16.0.0/16

EP-VPC側
image-4.png

Target-VPC側
image-5.png

このようにお互いのCidr範囲を指定してあげます。

4.エンドポイントのセキュリティグループにてTarget-VPCからのインバウントを許可

手順1でエンドポイントに設定したセキュリティグループに、Target-VPCからの通信を許可するインバウントルールを追加してあげます。
さっきと同様で、Target-VPCのCidrが「172.16.0.0/16」の場合こうなります。
image-6.png

5.EP-VPCにプライベートホストゾーンを作成する

ここでは、エンドポイントに名前解決されるようプライベートホストゾーンを作っていきます。
X-Ray東京リージョンの場合だと以下のようになります。
ドメイン名:xray.ap-northeast-1.amazonaws.com
image-7.png

※別サービス・別リージョンの場合はこちらを参考に

サービスエンドポイントとクォータ
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-service-information.html

6.エンドポイントのDNSを指すAレコードを作成する

続いてAレコードを作成します。
VPCエンドポイントへのエイリアスを選択してxrayで検索すると複数ヒットします。
これは、VPC・サブネット単位でエイリアスが作成されているためです。
AZ名の含まれていない方を選択すればOKです。
image-9.png

7.プライベートホストゾーンをTarget-VPCに関連付けを行う

最後にプライベートホストゾーンの関連付けを行います。
手順6までで、EP-VPC内のエンドポイントに名前解決される状態になっているため、このホストゾーンを関連付けることでエンドポイントを使用できるようになります。
同一アカウントであれば、マネジメントコンソールでホストゾーンの編集画面でVPCを追加するだけでOKです。
別アカウントの場合CLIで行う必要があります。

EP-VPC所有アカウント側

aws route53 create-vpc-association-authorization --hosted-zone-id { 手順5で作成したホストゾーンID } --vpc VPCRegion=ap-northeast-1,VPCId={ TargetVPCのID }

Target-VPC所有アカウント側

aws route53 associate-vpc-with-hosted-zone --hosted-zone-id { 手順5で作成したホストゾーンID } --vpc VPCRegion=ap-northeast-1,VPCId={ Target-VPCのID }

:bell:補足

ピアリングorTransitGatewayで繋がっている必要があるのでCidrが重複しないよう注意が必要です。

:page_with_curl:まとめ

この方法を使えば1つのエンドポイントで複数アカウントのリソース達がサービスを使えるようになります。
この方法を実践して、CostExplorerでVPCの料金が半分近くになっているのを見た時は感動ものでした:joy:
エンドポイントのコストで困っている人の手助けになれば嬉しいです!

0
1
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
0
1