Transit GatewayのVPC間通信を利用して別VPCにあるインスタンスをALBのターゲットに指定する
こんにちは、岩城です。
昨年、以下のエントリを書きました。
この派生として、Transit GatewayのVPC間通信の場合にどうなるかを確認しました。
結論
- Transit GatewayのVPC間通信でも、ALBのターゲットに別VPCのインスタンスを指定できる
- VPCピアリングとは違い、セキュリティグループIDの相互参照がサポートされていないので注意する
やってみた
以下のような構成で試してみました。
前提
本エントリの前提は以下のとおりです。
- VPC、サブネットを始めとする基本的なネットワークリソースを作成済み
Transit Gateway
Transit Gatewayを作成します。リソース名のCIDRを設定するだけで、あとはデフォルトのままとしました。
CIDRを指定する際は、VPCとの重複がないようにしてください。
次にそれぞれのVPCのサブネットに作成するTransit Gatewayアタッチメントを作成します。
アタッチメントタイプにVPCを選択し、アタッチメントが起動するサブネットを選択して作成します。
Transit Gatewayのベストプラクティスに、アタッチメント個別のサブネットを使用するとあり、それに倣っています。
各トランジットゲートウェイ VPC アタッチメントに個別のサブネットを使用します。各サブネットに対して、小さな CIDR (/28 など) を使用して、EC2 リソースのアドレスが増えるようにします。
同様に片方のVPCに対するアタッチメントを作成します。
ルートテーブル
対向のVPCに通信するため、Transit Gatewayアタッチメントをターゲットにするルートを追加します。
まずは、ALBが起動するパブリックサブネットのルートテーブルに対し、VPC2のCIDRを宛先とし、ターゲットにアタッチメントを指定するルートを追加します。
次にEC2インスタンスが起動するプライベートルートテーブルに対しても同様のルートを追加します。
VPCエンドポイント
今回、EC2インスタンスが起動するネットワーク構成をインターネットへのルートなしとしたため、Session ManagerとAmazon Linux AMIのリポジトリを利用するため、以下のVPCエンドポイントを作成しました。
Systems ManagerのVPCエンドポイント利用については、以下にまとめられています。
Systems Manager を使用してインターネットアクセスなしでプライベート EC2 インスタンスを管理できるように、VPC エンドポイントを作成するにはどうすればよいですか?
Amazon Linux AMIのリポジトリは、各リージョン内のS3にあるため、VPCエンドポイントを介してS3にアクセスできれば問題なく、S3のVPCエンドポイントを作成しました。
Amazon Linux AMI リポジトリは、各リージョン内の S3 バケットです。
EC2インスタンス
EC2インスタンスの起動時の注意点は以下の2つです。
- Session Managerの利用を許可するIAMポリシー
AmazonSSMManagedInstanceCore
を含むIAMロールをアタッチする - ALBからのアクセスを許可するようにセキュリティグループを設定する
セキュリティグループについては、本エントリ冒頭にも記載したとおり、VPCピアリングではセキュリティグループの相互参照が可能でしたが、Transit Gatewayの場合はサポートされていません。
Q: 初回のリリースでサポートされない Amazon VPC の機能はどれですか?
A: Amazon VPC でのセキュリティグループの参照は、リリース時にはサポートされません。スポーク型の Amazon VPC では、同一の AWS Transit Gateway に接続されている他のスポーク内のセキュリティグループは参照できません。
このため、ALBが起動するサブネットのCIDRか、VPCのCIDRをソースとするようにセキュリティグループを設定する点には注意してください。
次に、以下のコマンドを実行し、nginxをインストールした後、起動しておきます。
# nginxをインストールする $ sudo amazon-linux-extras install nginx1 # nginxを起動する $ sudo systemctl start nginx # nginxが起動したことを確認する $ sudo systemctl status nginx # nginxデフォルトのindex.htmlが返ってくることを確認する $ curl http://localhost
ALB
最後にALBを作成しますが、こちらも特別なことはしていないので省略します。
ターゲットグループにおいて、ターゲットとなるインスタンスを指定する際、ネットワークをその他のプライベートIPアドレス
とし、EC2インスタンスのプライベートIPを設定してください。以上で準備完了です。
動作確認
ALBのDNS名でアクセスして以下のようなnginxのページが表示されれば、Transit GatewayのVPC間通信を利用してALBからインスタンスにアクセスできたことになります。
おわりに
普段Transit Gatewayを利用することが少ないので、いい勉強になりました。
本エントリがどなたかのお役に立てれば幸いです。