hirokihelloです。今のインターン先の入社時はbashとshellの違いもわからなかったのに来るところまで来たなあと言う感じがあります。
今回業務でAWSのtransit gatewayの設定をするときに勘違いをしていて詰まったので、transit gatewayの基本概念と詰まった部分を残しておきたいと思います。
transit gatewayとはなんぞや
外部に公開していないネットワーク内部への通信を、他のvpcやvpsから通信できるようにするAWSのハブみたいな機能。
何が嬉しいのか?
例えば異なるVPCに置かれた二つのAPIサーバーがあったとします。
ALB経由でのみアクセスが前提の場合、private networkにそれらのAPIサーバーは置かれるので、普通nat gatewayなどを使用して外部のネットワーク経由でのみ二つのAPIサーバーはやりとりできます。(そりゃそうだ。)
しかし外部のネットワークを経由せずに直接vpnなどでやりとりした方が、特に業務向けのサービスの場合はセキュアにした方が良いので、そのように独立した外部に公開していないネットワーク同士を直接つなげたいとの要望が出てきます。
じゃあvpnでいいやん?
二つのAPIサーバなら、直接つなげばいいでしょう。
しかし4つになった場合を考えてください。
例えば4つのサーバーA,B,C,Dがあるとします。
その場合A-B, A-C, A-D, B-C, B-D, C-D間でvpnの設定をしなければなりません。
これは正直めんどくさいです。
transit gatewayのいいところ。
transit gatewayの場合は上記の例で言うと、A~Dのサーバーに加えてxと言うハブを新規で作ります。
そしてA-x, B-xのように、xとそれぞれのサーバーをつなげます。
そしてxにroutingの設定を行い、ip rangeでtransit gatewayに結び付けられたどのvpcの向け先に向けるかを設定します。
つまりハブ経由で全てアクセスさせると言うことです。
今回詰まった部分
transit gatewayをinternet gateway的なものだと勘違いしていた。
それぞれのアカウントでtransit gatewayを立てvpcに紐付け、そこからvpc同士をくっつけるのだと思ってました。
つまり、internet gateway的なインターネットにアクセスするための出口的なものとして認識していました。
解決策
まずクロスアカウントの場合は共有元となる一つのアカウントで、transit gatewayをどっかのvpcに立てます。
その後、そのtransit gatewayをResource Access Managerを使って他のアカウントに共有します。
その後にそれぞれのアカウントで紐付けたいvpcをattachmentを作成してtransit gatewayに紐づけます。
つまり共有もとのtransit gatewayをそれぞれのアカウントで使えるようにして、それぞれのアカウントが一つのtransit gatewayを共有してそこにそれぞれ紐付けていくと言うことが必要なのです。
追記
後で余裕があれば図などを付けます。
現在文学部3年ですが、絶賛就活中なのでtwitterなどに連絡くださると幸いです!!