AWS Transit Gatewayに接続したShared VPCにVPCエンドポイントを集約してみた
各VPC毎にVPCエンドポイントを作成するのは何だかイケていない気がする
こんにちは、のんピ(@non____97)です。
皆さんはShare VPCを作成したことありますか? 私はあります。
Shared VPCはNAT GatewayやVPCエンドポイントなどのネットワークリソースの中央監視と制御をするためのアーキテクチャーです。複数のVPCで必要なリソースをShared VPCに集約することで、リソースの管理をしやすくしたり、トータルの課金額を抑えたりできます。
個人的にShared VPCにNAT Gatewayの集約はよくするのですが、VPCエンドポイントの集約はやったことがなかったので、今回チャレンジしてみようと思います。
ちなみに、この記事をほぼ書き終えたタイミングで気づきましたが、同じ内容が既に投稿されていました。
こちらの記事とはRoute 53のコンソールのUIが変わっているので許してください。それだけだとまだ物足りない方もいらっしゃると思うので、VPCエンドポイントを集約することで、どの程度課金額がお得になるのかも計算してみます。
いきなりまとめ
- Shared VPCにあるVPCエンドポイントにアクセスするためには、Route 53 Private Hosted Zoneが必須
- 共有したいVPCエンドポイントのDNS名毎にRoute 53 Private Hosted Zoneを作成する
- Route 53 Private Hosted Zoneが作成されていない状態でも、
vpce-
から始まるDNS名は名前解決するとプライベートIPアドレスが返ってくる - 一方、各サービスのエンドポイント(
service-code.region-code.amazonaws.com
)は名前解決しても、作成したRoute 53 Private Hosted Zoneを問い合わせ元VPCに関連付けないとグローバルIPアドレスが返ってくる
- VPCエンドポイントにアクセスしたいVPC及びVPCエンドポイントの数が多くなれば多くなるほど、VPCエンドポイントを集約した方がお得になっていく傾向がある
- Transit GatewayとVPCピアリングのどちらでShared VPCに接続するかでコストが大きく変わる
- 以下に当てはまる場合はTransit Gatewayでの接続を考える
- 複数のVPC間でメッシュ状にピア接続を行う必要がある
- オンプレミス環境と接続したいVPCの数が多い (目安は11個以上)
- コストをかけてでもネットワーク管理や制御を簡素化したい
- 以下に当てはまる場合はVPCピアリングでの接続を考える
- ピア接続が必要なVPCが限られる
- オンプレミス環境と接続したいVPCの数が少ない (目安は10個以下)
- Transit VIFを用意できない
- とにかくコストを安くしたい
- 以下に当てはまる場合はTransit Gatewayでの接続を考える
検証の環境と進め方
検証の環境は以下の通りです。
VPC AとVPC Bが存在しており、VPC BにSSMを使用するために必要なVPCエンドポイントを集約します。
検証の流れは以下の通りです。
- VPC AのEC2インスタンスからVPC BのVPCエンドポイントに対して名前解決 (1回目)
- VPCエンドポイント毎のRoute 53 Private Hosted Zoneの作成とVPC Aへの関連付け
- VPC AのEC2インスタンスからVPC BのVPCエンドポイントに対して名前解決 (2回目)
- NAT Gatewayへのルートを削除しても、SSMセッションマネージャーでEC2インスタンスに接続できるか確認
VPC AのEC2インスタンスからVPC BのVPCエンドポイントに対して名前解決 (1回目)
まず、VPC AのEC2インスタンスからVPC BのVPCエンドポイントに対して名前解決をします。
VPCのコンソールからエンドポイント
を選択します。以下のVPCエンドポイントがあることを確認します。
com.amazonaws.us-east-1.ssm
com.amazonaws.us-east-1.ssmmessages
com.amazonaws.us-east-1.ec2messages
試しにサービス名がcom.amazonaws.us-east-1.ssm
の以下DNS名について、VPC AのEC2インスタンスから名前解決を行います。
vpce-07f12be0f999f2576-0mz5lmwo.ssm.us-east-1.vpce.amazonaws.com
vpce-07f12be0f999f2576-0mz5lmwo-us-east-1a.ssm.us-east-1.vpce.amazonaws.com
vpce-07f12be0f999f2576-0mz5lmwo-us-east-1b.ssm.us-east-1.vpce.amazonaws.com
ssm.us-east-1.amazonaws.com
名前解決を行うと、vpce-
から始まるDNS名は名前解決するとプライベートIPアドレスが返ってきました。一方でssm.us-east-1.amazonaws.com
についてはグローバルIPアドレスが返ってきました。
$ dig vpce-07f12be0f999f2576-0mz5lmwo.ssm.us-east-1.vpce.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> vpce-07f12be0f999f2576-0mz5lmwo.ssm.us-east-1.vpce.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59219 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;vpce-07f12be0f999f2576-0mz5lmwo.ssm.us-east-1.vpce.amazonaws.com. IN A ;; ANSWER SECTION: vpce-07f12be0f999f2576-0mz5lmwo.ssm.us-east-1.vpce.amazonaws.com. 60 IN A 10.0.1.104 vpce-07f12be0f999f2576-0mz5lmwo.ssm.us-east-1.vpce.amazonaws.com. 60 IN A 10.0.1.79 ;; Query time: 2 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Thu Oct 14 05:51:22 UTC 2021 ;; MSG SIZE rcvd: 125 $ dig vpce-07f12be0f999f2576-0mz5lmwo-us-east-1a.ssm.us-east-1.vpce.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> vpce-07f12be0f999f2576-0mz5lmwo-us-east-1a.ssm.us-east-1.vpce.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41115 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;vpce-07f12be0f999f2576-0mz5lmwo-us-east-1a.ssm.us-east-1.vpce.amazonaws.com. IN A ;; ANSWER SECTION: vpce-07f12be0f999f2576-0mz5lmwo-us-east-1a.ssm.us-east-1.vpce.amazonaws.com. 60 IN A 10.0.1.79 ;; Query time: 2 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Thu Oct 14 05:51:33 UTC 2021 ;; MSG SIZE rcvd: 120 $ dig vpce-07f12be0f999f2576-0mz5lmwo-us-east-1b.ssm.us-east-1.vpce.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> vpce-07f12be0f999f2576-0mz5lmwo-us-east-1b.ssm.us-east-1.vpce.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59695 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;vpce-07f12be0f999f2576-0mz5lmwo-us-east-1b.ssm.us-east-1.vpce.amazonaws.com. IN A ;; ANSWER SECTION: vpce-07f12be0f999f2576-0mz5lmwo-us-east-1b.ssm.us-east-1.vpce.amazonaws.com. 60 IN A 10.0.1.104 ;; Query time: 39 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Thu Oct 14 05:51:42 UTC 2021 ;; MSG SIZE rcvd: 120 $ dig ssm.us-east-1.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ssm.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51109 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ssm.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: ssm.us-east-1.amazonaws.com. 25 IN A 52.46.141.158 ;; Query time: 1 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Thu Oct 14 05:52:01 UTC 2021 ;; MSG SIZE rcvd: 72
実際にSSMエージェントがSSMのサービスエンドポイントにアクセスする際は、ssm.us-east-1.amazonaws.com
に対してアクセスを行おうとします。そのためssm.us-east-1.amazonaws.com
を名前解決した時にグローバルIPアドレスが返ってくると、インターネットに接続できる環境が必要になります。
service-code.region-code.amazonaws.com
形式のDNS名を名前解決したときにグローバルIPアドレスが返ってくる理由は、service-code.region-code.amazonaws.com
形式のDNS名は、あるリージョンのサービスエンドポイントであり、VPCエンドポイントと関連付いていないためです。
vpce-
から始まるDNS名はグローバルに一意なDNS名です。そのため、名前解決したときに、service-code.region-code.amazonaws.com
ドメインはサブドメインであるvpc-xxxx
がどこのVPC上で作成されたVPCエンドポイントかを一意に特定できます。結果として、VPC A上のEC2インスタンスや手元のMacやWindowsマシンなどからvpce-
から始まるDNS名を名前解決をするとプライベートIPアドレスが返ってきます。
一方でservice-code.region-code.amazonaws.com
形式のDNS名は、あるリージョンのサービスエンドポイントであるため、プライベートIPアドレスを返すようにするためには工夫が必要です。
具体的には、EC2インスタンスのデフォルトのDNSサーバーであるAmazonProvidedDNSがservice-code.region-code.amazonaws.com
形式のDNS名への名前解決を受け付けたときに、vpce-
から始まるDNS名の名前解決結果を回答するようにします。
今回の場合は、AmazonProvidedDNSがssm.us-east-1.amazonaws.com
をVPC B上のSSMのVPCエンドポイント(vpce-07f12be0f999f2576-0mz5lmwo.ssm.us-east-1.vpce.amazonaws.com
)と認識できるようになれば、名前解決したときに、そのVPCエンドポイントのプライベートIPアドレスを返してくれるようになります。
このような動作をするように、「VPCエンドポイント毎のRoute 53 Private Hosted Zoneの作成と、作成したRoute 53 Private Hosted ZoneのVPC Aへの関連付け」を行います。
VPCエンドポイント毎のRoute 53 Private Hosted Zoneの作成とVPC Aへの関連付け
それでは、VPCエンドポイント毎のRoute 53 Private Hosted Zoneの作成とVPC Aへの関連付けを行います。
Route 53のコンソールからホストゾーン
- ホストゾーンの作成
をクリックします。
以下のように設定して、ホストゾーンの作成
をクリックします。
- ドメイン名:
ssm.us-east-1.amazonaws.com
のようなVPCエンドポイントのPrivate DNS names - タイプ:
プライベートホストゾーン
- リージョン: 関連付けたいVPCが存在するリージョン
- VPC ID: 関連付けたいVPCのID
Private Hosted Zoneの作成が完了すると、登録されているレコード一覧を確認できます。
次にレコードを作成します。
作成したPrivate Hosted Zoneのレコード一覧からレコードを作成
をクリックします。
以下のようにZone APEXに対してVPCエンドポイントのDNS名のエイリアスレコードを設定し、レコードを作成
をクリックします。
- レコード名: (空欄)
- レコードタイプ:
A
- トラフィックのルーティング先:
エイリアス
VPCエンドポイントのエイリアス
- VPCエンドポイントを作成したリージョン
- VPCエンドポイントのID
エイリアスレコードが追加されていることを確認します。これで、VPC A上でssm.us-east-1.amazonaws.com
を名前解決すると、プライベートIPアドレスが返ってくるようになります。
他のVPCエンドポイントについても、Private Hosted Zone作成とレコードの追加をします。
VPC AのEC2インスタンスからVPC BのVPCエンドポイントに対して名前解決 (2回目)
この状態でservice-code.region-code.amazonaws.com
形式の以下DNS名について、VPC AのEC2インスタンスから名前解決をします。
ssm.us-east-1.amazonaws.com
ssmmessages.us-east-1.amazonaws.com
ec2messages.us-east-1.amazonaws.com.
名前解決を行うと、全てのDNS名でプライベートIPアドレスが返ってきました。成功ですね。
$ dig ssm.us-east-1.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ssm.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21744 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ssm.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: ssm.us-east-1.amazonaws.com. 60 IN A 10.0.1.104 ssm.us-east-1.amazonaws.com. 60 IN A 10.0.1.79 ;; Query time: 2 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Thu Oct 14 07:26:41 UTC 2021 ;; MSG SIZE rcvd: 88 $ dig ssmmessages.us-east-1.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ssmmessages.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50285 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ssmmessages.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: ssmmessages.us-east-1.amazonaws.com. 60 IN A 10.0.1.80 ssmmessages.us-east-1.amazonaws.com. 60 IN A 10.0.1.102 ;; Query time: 3 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Thu Oct 14 07:27:00 UTC 2021 ;; MSG SIZE rcvd: 96 $ dig ec2messages.us-east-1.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2messages.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20346 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ec2messages.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: ec2messages.us-east-1.amazonaws.com. 45 IN A 10.0.1.86 ec2messages.us-east-1.amazonaws.com. 45 IN A 10.0.1.123 ;; Query time: 0 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Thu Oct 14 07:27:16 UTC 2021 ;; MSG SIZE rcvd: 96
NAT Gatewayへのルートを削除しても、SSMセッションマネージャーでEC2インスタンスに接続できるか確認
最後に動作確認ということで、VPC AのEC2インスタンスからNAT Gatewayへのルートを削除しても、SSMセッションマネージャーでEC2インスタンスに接続できるかを確認します。
EC2のコンソールから、VCP AのEC2インスタンスのサブネット、ルートテーブルをたどっていきます。ルートテーブルにターゲットがNAT Gatewayのルートがあるので、こちらを削除します。
これでEC2インスタンスがインターネットに出ていく経路がなくなりました。この状態でSSMセッションマネージャーを使ってEC2インスタンスに接続します。
すると、SSMセッションマネージャーを使ってEC2インスタンスに接続することを確認できました。VPC B上のVPCエンドポイントに正常にアクセスできていそうですね。
SSMエージェントのログも確認しておきます。ログは以下の通りで、特にエラーは発生していませんでした。
$ sudo tail -n 100 /var/log/amazon/ssm/amazon-ssm-agent.log 2021-10-14 07:31:38 INFO [amazon-ssm-agent] OS: linux, Arch: amd64 2021-10-14 07:31:39 INFO [amazon-ssm-agent] [LongRunningWorkerContainer] [WorkerProvider] Worker ssm-agent-worker is not running, starting worker process 2021-10-14 07:31:39 INFO [amazon-ssm-agent] [LongRunningWorkerContainer] [WorkerProvider] Worker ssm-agent-worker (pid:2290) started 2021-10-14 07:31:39 INFO [amazon-ssm-agent] [LongRunningWorkerContainer] Monitor long running worker health every 60 seconds 2021-10-14 07:31:40 INFO [ssm-agent-worker] Agent will take identity from EC2 2021-10-14 07:31:40 INFO [ssm-agent-worker] using named pipe channel for IPC 2021-10-14 07:31:40 INFO [ssm-agent-worker] Dial to Core Agent broadcast channel 2021-10-14 07:31:40 INFO [ssm-agent-worker] using named pipe channel for IPC 2021-10-14 07:31:40 INFO [ssm-agent-worker] Dial to Core Agent broadcast channel 2021-10-14 07:31:40 INFO [ssm-agent-worker] using named pipe channel for IPC 2021-10-14 07:31:40 INFO [ssm-agent-worker] Create new startup processor 2021-10-14 07:31:40 INFO [ssm-agent-worker] Start to listen to Core Agent health channel 2021-10-14 07:31:40 INFO [ssm-agent-worker] Start to listen to Core Agent termination channel 2021-10-14 07:31:40 INFO [ssm-agent-worker] [StartupProcessor] Executing startup processor tasks 2021-10-14 07:31:40 INFO [ssm-agent-worker] [StartupProcessor] Write to serial port: Amazon SSM Agent v3.0.1124.0 is running 2021-10-14 07:31:40 INFO [ssm-agent-worker] [StartupProcessor] Write to serial port: OsProductName: Amazon Linux 2021-10-14 07:31:40 INFO [ssm-agent-worker] [StartupProcessor] Write to serial port: OsVersion: 2 2021-10-14 07:31:40 INFO [ssm-agent-worker] [LongRunningPluginsManager] registered plugins: {} 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing bookkeeping folders 2021-10-14 07:31:40 INFO [ssm-agent-worker] removing the completed state files 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing bookkeeping folders for long running plugins 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing replies folder for MDS reply requests that couldn't reach the service 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing healthcheck folders for long running plugins 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing locations for inventory plugin 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing default location for custom inventory 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing default location for file inventory 2021-10-14 07:31:40 INFO [ssm-agent-worker] Initializing default location for role inventory 2021-10-14 07:31:40 INFO [ssm-agent-worker] Init the cloudwatchlogs publisher 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:runDockerAction 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:downloadContent 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:runDocument 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:softwareInventory 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:runPowerShellScript 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:configureDocker 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:updateSsmAgent 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:refreshAssociation 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform independent plugin aws:configurePackage 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform dependent plugin aws:runShellScript 2021-10-14 07:31:40 INFO [ssm-agent-worker] [instanceID=i-08ddde217f064e3b6] Successfully loaded platform dependent plugin aws:domainJoin 2021-10-14 07:31:40 INFO [ssm-agent-worker] ssm-agent-worker - v3.0.1124.0 2021-10-14 07:31:40 INFO [ssm-agent-worker] OS: linux, Arch: amd64 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] Starting document processing engine... 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [EngineProcessor] Starting 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [EngineProcessor] Initial processing 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] Starting message polling 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] Starting send replies to MDS 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] Starting association polling 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] [EngineProcessor] Starting 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] Launching response handler 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] [EngineProcessor] Initial processing 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] Initializing association scheduling service 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] Association scheduling service initialized 2021-10-14 07:31:40 INFO [ssm-agent-worker] [OfflineService] Starting document processing engine... 2021-10-14 07:31:40 INFO [ssm-agent-worker] [OfflineService] [EngineProcessor] Starting 2021-10-14 07:31:40 INFO [ssm-agent-worker] [OfflineService] [EngineProcessor] Initial processing 2021-10-14 07:31:40 INFO [ssm-agent-worker] [OfflineService] Starting message polling 2021-10-14 07:31:40 INFO [ssm-agent-worker] [OfflineService] Starting send replies to MDS 2021-10-14 07:31:40 INFO [ssm-agent-worker] [LongRunningPluginsManager] starting long running plugin manager 2021-10-14 07:31:40 INFO [ssm-agent-worker] [LongRunningPluginsManager] there aren't any long running plugin to execute 2021-10-14 07:31:40 INFO [ssm-agent-worker] [LongRunningPluginsManager] There are no long running plugins currently getting executed - skipping their healthcheck 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Starting session document processing engine... 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] [EngineProcessor] Starting 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] SSM Agent is trying to setup control channel for Session Manager module. 2021-10-14 07:31:40 INFO [ssm-agent-worker] [HealthCheck] HealthCheck reporting agent health. 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] listening reply. 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] listening task acknowledge. 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] agent telemetry cloudwatch metrics disabled 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Setting up websocket for controlchannel for instance: i-08ddde217f064e3b6, requestId: 7484fcb7-6b39-4341-b0a3-35f4d5b55335 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Opening websocket connection to: wss://ssmmessages.us-east-1.amazonaws.com/v1/control-channel/i-08ddde217f064e3b6?role=subscribe&stream=input 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Successfully opened websocket connection to: wss://ssmmessages.us-east-1.amazonaws.com/v1/control-channel/i-08ddde217f064e3b6?role=subscribe&stream=input 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Starting websocket pinger 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Setting up agent telemetry scheduler 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Starting websocket listener 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] Starting receiving message from control channel 2021-10-14 07:31:40 INFO [ssm-agent-worker] [MessageGatewayService] [EngineProcessor] Initial processing 2021-10-14 07:31:51 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] No associations on boot. Requerying for associations after 30 seconds. 2021-10-14 07:32:21 INFO [ssm-agent-worker] [MessagingDeliveryService] [Association] Schedule manager refreshed with 0 associations, 0 new associations associated 2021-10-14 07:32:26 INFO [ssm-agent-worker] [HealthCheck] HealthCheck reporting agent health. 2021-10-14 07:34:51 INFO [ssm-agent-worker] [MessageGatewayService] Validating SSM parameters 2021-10-14 07:34:51 INFO [ssm-agent-worker] [MessageGatewayService] [EngineProcessor] [BasicExecuter] [<IAMロール名>-0e415a031bdce7766] channel: <IAMロール名>-0e415a031bdce7766 not found, creating a new file channel... 2021-10-14 07:34:51 INFO Agent will take identity from EC2 2021-10-14 07:34:51 INFO [ssm-agent-worker] [MessageGatewayService] [EngineProcessor] [BasicExecuter] [<IAMロール名>-0e415a031bdce7766] master listener started on path: /var/lib/amazon/ssm/i-08ddde217f064e3b6/channels/<IAMロール名>-0e415a031bdce7766 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] ssm-session-worker - v3.0.1124.0 2021-10-14 07:34:51 INFO [ssm-agent-worker] [MessageGatewayService] [EngineProcessor] [BasicExecuter] [<IAMロール名>-0e415a031bdce7766] inter process communication started at /var/lib/amazon/ssm/i-08ddde217f064e3b6/channels/<IAMロール名>-0e415a031bdce7766 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] document: <IAMロール名>-0e415a031bdce7766 worker started 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] channel: <IAMロール名>-0e415a031bdce7766 found 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] inter process communication started at /var/lib/amazon/ssm/i-08ddde217f064e3b6/channels/<IAMロール名>-0e415a031bdce7766 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] worker listener started on path: /var/lib/amazon/ssm/i-08ddde217f064e3b6/channels/<IAMロール名>-0e415a031bdce7766 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] received plugin config message 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] {"DocumentInformation":{"DocumentID":"<IAMロール名>-0e415a031bdce7766","CommandID":"<IAMロール名>-0e415a031bdce7766","AssociationID":"","InstanceID":"i-08ddde217f064e3b6","MessageID":"<IAMロール名>-0e415a031bdce7766","RunID":"2021-10-14T07-34-51.557Z","CreatedDate":"53755-08-21 20:59:16 +0000 UTC","DocumentName":"","DocumentVersion":"","DocumentStatus":"InProgress","RunCount":0,"ProcInfo":{"Pid":2329,"StartTime":"2021-10-14T07:34:51.56010895Z"},"ClientId":"","RunAsUser":"","SessionOwner":"arn:aws:sts::984900217833:assumed-role/<IAMロール名>/<IAMロール名>"},"DocumentType":"StartSession","SchemaVersion":"1.0","InstancePluginsInformation":[{"Configuration":{"Settings":null,"Properties":null,"OutputS3KeyPrefix":"","OutputS3BucketName":"","S3EncryptionEnabled":true,"CloudWatchLogGroup":"","CloudWatchEncryptionEnabled":true,"CloudWatchStreamingEnabled":true,"OrchestrationDirectory":"/var/lib/amazon/ssm/i-08ddde217f064e3b6/session/orchestration/<IAMロール名>-0e415a031bdce7766/Standard_Stream","MessageId":"<IAMロール名>-0e415a031bdce7766","BookKeepingFileName":"<IAMロール名>-0e415a031bdce7766","PluginName":"Standard_Stream","PluginID":"Standard_Stream","DefaultWorkingDirectory":"","Preconditions":null,"IsPreconditionEnabled":false,"CurrentAssociations":null,"SessionId":"<IAMロール名>-0e415a031bdce7766","ClientId":"","KmsKeyId":"","RunAsEnabled":false,"RunAsUser":"","ShellProfile":{"windows":"","linux":""},"SessionOwner":"arn:aws:sts::984900217833:assumed-role/<IAMロール名>/<IAMロール名>"},"Name":"Standard_Stream","Result":{"pluginID":"","pluginName":"","status":"","code":0,"output":null,"startDateTime":"0001-01-01T00:00:00Z","endDateTime":"0001-01-01T00:00:00Z","outputS3BucketName":"","outputS3KeyPrefix":"","stepName":"","error":"","standardOutput":"","standardError":""},"Id":"Standard_Stream"}],"CancelInformation":{"CancelMessageID":"","CancelCommandID":"","Payload":"","DebugInfo":""},"IOConfig":{"OrchestrationDirectory":"/var/lib/amazon/ssm/i-08ddde217f064e3b6/session/orchestration/<IAMロール名>-0e415a031bdce7766","OutputS3BucketName":"","OutputS3KeyPrefix":"","CloudWatchConfig":{"LogGroupName":"","LogStreamPrefix":"","LogGroupEncryptionEnabled":false}}} 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] Running plugin Standard_Stream Standard_Stream 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Setting up datachannel for session: <IAMロール名>-0e415a031bdce7766, requestId: 4c7bbe64-da2c-4a32-867a-72c4411c2911, clientId: 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Opening websocket connection to: wss://ssmmessages.us-east-1.amazonaws.com/v1/data-channel/<IAMロール名>-0e415a031bdce7766?role=publish_subscribe 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Successfully opened websocket connection to: wss://ssmmessages.us-east-1.amazonaws.com/v1/data-channel/<IAMロール名>-0e415a031bdce7766?role=publish_subscribe 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Starting websocket pinger 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Starting websocket listener 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Skipping handshake. 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Starting command executor 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] ssm-user already exists. 2021-10-14 07:34:51 INFO [ssm-session-worker] [<IAMロール名>-0e415a031bdce7766] [DataBackend] [pluginName=Standard_Stream] Plugin Standard_Stream started
VPCエンドポイントをShared VPCに集約することによる課金額への影響
VPCエンドポイントへの接続パターン
おまけでVPCエンドポイントをShared VPCに集約することによる課金額への影響を確認します。具体的には、以下VPCエンドポイントへの接続パターン毎に課金額がどのようになるのかを算出します。
- VPCエンドポイントをShared VPCに集約するパターン(Transit Gatewayで接続)
- VPCエンドポイントをShared VPCに集約するパターン(VPCピアリングで接続)
- VPC毎にVPCエンドポイントを作成するパターン(Transit Gatewayで接続)
- VPC毎にVPCエンドポイントを作成するパターン(VPC間の接続なし)
課金額計算の前提
課金額を算出するにあたっての前提条件は以下の通りです。
- 2021年10月時点の東京リージョンの料金を参照
- 1ヶ月あたりの課金額を計算
- 1ヶ月は720時間として計算
- VPCエンドポイントは2AZに配置
- VPCエンドポイントは3サービス分作成
- VPCエンドポイントが処理するデータ量は1ヶ月に1PB未満
- VPCエンドポイントをShared VPCに集約する場合、Shared VPCに接続するVPCは3つで計算
- VPCエンドポイントをShared VPCに集約しない場合はVPCを3つで計算
- 以下に関する課金は計算に含めない
- AZ間の通信
- 各VPCとオンプレミス環境間の通信
- Shaed VPC以外のVPC間通信
参考情報
1. VPCエンドポイントをShared VPCに集約するパターン(Transit Gatewayで接続)
構成図は以下のようになります。
1ヶ月あたりの課金額の計算結果は以下の通りです。
= (VPCエンドポイントの1時間あたりの課金額 * AZ数) * 1ヶ月あたりの利用時間 + Route 53 Private Hosted Zoneの1ヶ月あたりの課金額 = (0.01 USD/h * 2 AZ ) * 720 h + 0.5 USD/m = 14.9 USD/m
= Transit Gateway Attachmentごとの1時間あたりの課金額 * 1ヶ月あたりの利用時間 = 0.07 USD * 720 h = 50.4 USD/m
= VPCエンドポイントの処理データ1GBあたりの課金額 + Transit Gatewayの処理データ1GBあたりの課金額 = 0.01 USD/GB + 0.02 USD/GB = 0.03 USD/GB
[固定費] = 1ヶ月あたりのVPCエンドポイントの課金額 * VPCエンドポイントの数 + 1ヶ月あたりのTransit Gateway Attachmentの課金額 * VPC数 = 14.9 USD/m * 3 VPCエンドポイント + 50.4 USD/m * 4 VPC = 44.7 USD/m + 201.6 USD/m = 246.3 USD/m [変動費] = 処理データ1GBあたりの課金額 = 0.03 USD/GB [総課金額] = 246.3 USD/m + 0.03 USD/GB
また、VPC数, VPCエンドポイント数を変更すると固定費は以下のように変化します。
- VPC数, VPCエンドポイント数 =
3, 3
:246.3 USD
- VPC数, VPCエンドポイント数 =
3, 5
:276.1 USD
- VPC数, VPCエンドポイント数 =
3, 10
:350.6 USD
- VPC数, VPCエンドポイント数 =
5, 3
:347.1 USD
- VPC数, VPCエンドポイント数 =
5, 5
:376.9 USD
- VPC数, VPCエンドポイント数 =
5, 10
:451.4 USD
- VPC数, VPCエンドポイント数 =
10, 3
:599.1 USD
- VPC数, VPCエンドポイント数 =
10, 5
:628.9 USD
- VPC数, VPCエンドポイント数 =
10, 10
:703.4 USD
2. VPCエンドポイントをShared VPCに集約するパターン(VPCピアリングで接続)
構成図は以下のようになります。
1ヶ月あたりの課金額の計算結果は以下の通りです。
= (VPCエンドポイントの1時間あたりの課金額 * AZ数) * 1ヶ月あたりの利用時間 + Route 53 Private Hosted Zoneの1ヶ月あたりの課金額 = (0.01 USD/h * 2 AZ ) * 720 h + 0.5 USD/m = 14.9 USD/m
= VPCエンドポイントの処理データ1GBあたりの課金額 = 0.01 USD/GB
[固定費] = 1ヶ月あたりのVPCエンドポイントの課金額 * VPCエンドポイントの数 = 14.9 USD/m * 3 VPCエンドポイント = 44.7 USD/m [変動費] = 処理データ1GBあたりの課金額 = 0.01 USD/GB [総課金額] = 44.7 USD/m + 0.01 USD/GB
また、VPC数, VPCエンドポイント数を変更すると固定費は以下のように変化します。
- VPC数, VPCエンドポイント数 =
3, 3
:44.7 USD
- VPC数, VPCエンドポイント数 =
3, 5
:74.5 USD
- VPC数, VPCエンドポイント数 =
3, 10
:149.0 USD
- VPC数, VPCエンドポイント数 =
5, 3
:44.7 USD
- VPC数, VPCエンドポイント数 =
5, 4
:74.5 USD
- VPC数, VPCエンドポイント数 =
5, 10
:149.0 USD
- VPC数, VPCエンドポイント数 =
10, 3
:44.7 USD
- VPC数, VPCエンドポイント数 =
10, 4
:74.5 USD
- VPC数, VPCエンドポイント数 =
10, 10
:149.0 USD
3. VPC毎にVPCエンドポイントを作成するパターン(Transit Gatewayで接続)
構成図は以下のようになります。
1ヶ月あたりの課金額の計算結果は以下の通りです。
= (VPCエンドポイントの1時間あたりの課金額 * AZ数) * 1ヶ月あたりの利用時間 = (0.01 USD/h * 2 AZ ) * 720 h = 14.4 USD/m
= Transit Gateway Attachmentごとの1時間あたりの課金額 * 1ヶ月あたりの利用時間 = 0.07 USD * 720 h = 50.4 USD/m
= VPCエンドポイントの処理データ1GBあたりの課金額 = 0.01 USD
[固定費] = 1ヶ月あたりのVPCエンドポイントの課金額 * VPCエンドポイントの数 * VPC数 + 1ヶ月あたりのTransit Gateway Attachmentの課金額 * VPC数 = 14.9 USD/m * 3 VPCエンドポイント * 3 VPC + 50.4 USD/m * 3 VPC = 134.1 USD/m + 151.2 USD/m = 285.3 USD/m [変動費] = 処理データ1GBあたりの課金額 = 0.01 USD/GB [総課金額] = 285.3 USD/m + 0.01 USD/GB
また、VPC数, VPCエンドポイント数を変更すると固定費は以下のように変化します。
- VPC数, VPCエンドポイント数 =
3, 3
:285.3 USD
- VPC数, VPCエンドポイント数 =
3, 5
:374.7 USD
- VPC数, VPCエンドポイント数 =
3, 10
:598.2 USD
- VPC数, VPCエンドポイント数 =
5, 3
:475.5 USD
- VPC数, VPCエンドポイント数 =
5, 5
:624.5 USD
- VPC数, VPCエンドポイント数 =
5, 10
:997.0 USD
- VPC数, VPCエンドポイント数 =
10, 3
:951.0 USD
- VPC数, VPCエンドポイント数 =
10, 5
:1249.0 USD
- VPC数, VPCエンドポイント数 =
10, 10
:1994.0 USD
4. VPC毎にVPCエンドポイントを作成するパターン(VPC間の接続なし)
構成図は以下のようになります。
1ヶ月あたりの課金額の計算結果は以下の通りです。
= (VPCエンドポイントの1時間あたりの課金額 * AZ数) * 1ヶ月あたりの利用時間 = (0.01 USD/h * 2 AZ ) * 720 h = 14.4 USD/m
= VPCエンドポイントの処理データ1GBあたりの課金額 = 0.01 USD
[固定費] = 1ヶ月あたりのVPCエンドポイントの課金額 * VPCエンドポイントの数 * VPC数 = 14.9 USD/m * 3 VPCエンドポイント * 3 VPC = 134.1 USD/m [変動費] = 処理データ1GBあたりの課金額 = 0.01 USD/GB [総課金額] = 134.1 USD/m + 0.01 USD/GB
また、VPC数, VPCエンドポイント数を変更すると固定費は以下のように変化します。
- VPC数, VPCエンドポイント数 =
3, 3
:134.1 USD
- VPC数, VPCエンドポイント数 =
3, 5
:223.5 USD
- VPC数, VPCエンドポイント数 =
3, 10
:447.0 USD
- VPC数, VPCエンドポイント数 =
5, 3
:223.5 USD
- VPC数, VPCエンドポイント数 =
5, 5
:372.5 USD
- VPC数, VPCエンドポイント数 =
5, 10
:745.0 USD
- VPC数, VPCエンドポイント数 =
10, 3
:447.0 USD
- VPC数, VPCエンドポイント数 =
10, 5
:745.0 USD
- VPC数, VPCエンドポイント数 =
10, 10
:1490.0 USD
課金額の比較
VPCエンドポイントへの接続パターン毎の課金額をまとめると以下の通りです。
246.3 USD/m + 0.03 USD/GB
: 1. VPCエンドポイントをShared VPCに集約するパターン(Transit Gatewayで接続)44.7 USD/m + 0.01 USD/GB
: 2. VPCエンドポイントをShared VPCに集約するパターン(VPCピアリングで接続)285.3 USD/m + 0.01 USD/GB
: 3. VPC毎にVPCエンドポイントを作成するパターン(Transit Gatewayで接続)134.1 USD/m + 0.01 USD/GB
: 4. VPC毎にVPCエンドポイントを作成するパターン(VPC間の接続なし)
固定費が課金額全体の中で大きなウェイトとなるので、VPCエンドポイントの集約の有無で、どの程度固定費に差が出るのかを比較してみました。
比較結果は以下の通りです。
- 「1. VPCエンドポイントをShared VPCに集約するパターン(Transit Gatewayで接続)の固定費」 と 「3. VPC毎にVPCエンドポイントを作成するパターン(Transit Gatewayで接続)の固定費」の比較
VPC数, VPCエンドポイント数の組み合わせ | 1. VPCエンドポイントをShared VPCに集約するパターン(Transit Gatewayで接続)の固定費 | 3. VPC毎にVPCエンドポイントを作成するパターン(Transit Gatewayで接続)の固定費 | VPCエンドポイントの集約の有無による課金額の差 |
---|---|---|---|
VPC数, VPCエンドポイント数 = 3, 3 | 246.3 USD | 285.3 USD | 13.67% |
VPC数, VPCエンドポイント数 = 3, 5 | 276.1 USD | 374.7 USD | 26.31% |
VPC数, VPCエンドポイント数 = 3, 10 | 350.6 USD | 598.2 USD | 41.39% |
VPC数, VPCエンドポイント数 = 5, 3 | 347.1 USD | 475.5 USD | 27.00% |
VPC数, VPCエンドポイント数 = 5, 5 | 376.9 USD | 624.5 USD | 39.65% |
VPC数, VPCエンドポイント数 = 5, 10 | 451.4 USD | 997.0 USD | 54.72% |
VPC数, VPCエンドポイント数 = 10, 3 | 599.1 USD | 951.0 USD | 37.00% |
VPC数, VPCエンドポイント数 = 10, 5 | 628.9 USD | 1249.0 USD | 49.65% |
VPC数, VPCエンドポイント数 = 10, 10 | 703.4 USD | 1994.0 USD | 64.72% |
- 「1. VPCエンドポイントをShared VPCに集約するパターン(Transit Gatewayで接続)の固定費」 と 「4. VPC毎にVPCエンドポイントを作成するパターン(VPC間の接続はなし)の固定費」の比較
VPC数, VPCエンドポイント数の組み合わせ | 1. VPCエンドポイントをShared VPCに集約するパターン(Transit Gatewayで接続)の固定費 | 4. VPC毎にVPCエンドポイントを作成するパターン(VPC間の接続はなし)の固定費 | VPCエンドポイントの集約の有無による課金額の差 |
---|---|---|---|
VPC数, VPCエンドポイント数 = 3, 3 | 246.3 USD | 134.1 USD | -83.67% |
VPC数, VPCエンドポイント数 = 3, 5 | 276.1 USD | 223.5 USD | -23.53% |
VPC数, VPCエンドポイント数 = 3, 10 | 350.6 USD | 447.0 USD | 21.57% |
VPC数, VPCエンドポイント数 = 5, 3 | 347.1 USD | 223.5 USD | -55.30% |
VPC数, VPCエンドポイント数 = 5, 5 | 376.9 USD | 372.5 USD | -1.18% |
VPC数, VPCエンドポイント数 = 5, 10 | 451.4 USD | 745.0 USD | 39.41% |
VPC数, VPCエンドポイント数 = 10, 3 | 599.1 USD | 447.0 USD | -34.03% |
VPC数, VPCエンドポイント数 = 10, 5 | 628.9 USD | 745.0 USD | 15.58% |
VPC数, VPCエンドポイント数 = 10, 10 | 703.4 USD | 1490.0 USD | 52.79% |
- 「2. VPCエンドポイントをShared VPCに集約するパターン(VPCピアリングで接続)」 と 「4. VPC毎にVPCエンドポイントを作成するパターン(VPC間の接続はなし)の固定費」の比較
VPC数, VPCエンドポイント数の組み合わせ | 2. VPCエンドポイントをShared VPCに集約するパターン(VPCピアリングで接続)の固定費 | 4. VPC毎にVPCエンドポイントを作成するパターン(VPC間の接続はなし)の固定費 | VPCエンドポイントの集約の有無による課金額の差 |
---|---|---|---|
VPC数, VPCエンドポイント数 = 3, 3 | 44.7 USD | 134.1 USD | 66.67% |
VPC数, VPCエンドポイント数 = 3, 5 | 74.5 USD | 223.5 USD | 66.67% |
VPC数, VPCエンドポイント数 = 3, 10 | 149.0 USD | 447.0 USD | 66.67% |
VPC数, VPCエンドポイント数 = 5, 3 | 44.7 USD | 223.5 USD | 80.00% |
VPC数, VPCエンドポイント数 = 5, 5 | 74.5 USD | 372.5 USD | 80.00% |
VPC数, VPCエンドポイント数 = 5, 10 | 149.0 USD | 745.0 USD | 80.00% |
VPC数, VPCエンドポイント数 = 10, 3 | 44.7 USD | 447.0 USD | 90.00% |
VPC数, VPCエンドポイント数 = 10, 5 | 74.5 USD | 745.0 USD | 90.00% |
VPC数, VPCエンドポイント数 = 10, 10 | 149.0 USD | 1490.0 USD | 90.00% |
VPCエンドポイントにアクセスしたいVPC及び、VPCエンドポイントの数が多くなれば多くなるほど、VPCエンドポイントを集約した方がお得になっていく傾向があることが分かります。
変動費は「1ヶ月あたりの処理データ量」がありますが、例え100GBの通信が発生したとしても最大3 USDしか影響しないため、課金額全体への影響は微々たるものだと考えます。
また、Transit GatewayとVPCピアリングのどちらでShared VPCに接続するかでコストが大きく変わります。Transit Gatewayで接続するか、VPCピアリングで接続するかは、以下を目安に考えると良いかと思います。
- 以下に当てはまる場合はTransit Gatewayでの接続を考える
- 複数のVPC間でメッシュ状にピア接続を行う必要がある
- オンプレミス環境と接続したいVPCの数が多い (目安は11個以上)
- コストをかけてでもネットワーク管理や制御を簡素化したい
- 以下に当てはまる場合はVPCピアリングでの接続を考える
- ピア接続が必要なVPCが限られる
- オンプレミス環境と接続したいVPCの数が少ない (目安は10個以下)
- Transit VIFを用意できない
- とにかくコストを安くしたい
基本はVPCエンドポイントを集約してもいいかも
AWS Transit Gatewayに接続したShared VPCにAWS VPCエンドポイントを集約してみました。
課金額に注目すると、VPCエンドポイントの集約は確かにメリットがあることを確認できました。
一方で、VPCエンドポイントを共有して使用するため、リソース変更の柔軟性は失ってしまいます。また、Transit GatewayでShared VPCに接続すると、VPCエンドポイントへ通信する際に追加で課金が発生してしまうので要注意です。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!