理系学生日記

おまえはいつまで学生気分なのか

AWSのVPC Reachability Analyzerで疎通性を確認する

課題

プライベートサブネットに対し、SSM Agentを インストールしたEC2を配置しました。セッションマネージャー経由で接続を試みたところ、どうも疎通ができません。

解決に向けて

そこで思いあたったのがReachability Analyzerです。 存在自体は知っていたものの使ったことがなかったこともあり、せっかくなので試してみました。

構成

ネットワークはシンプルで、以下のようなよくある構成です。

ここに、Reachability Analyzerを構成します。 Terraformで記述しているので、リソースとしてはaws_ec2_network_insights_pathを作成しました。

EC2からインターネットゲートウェイへの80番ポートの疎通性を確認します。

diff --git a/main.tf b/main.tf
index 6d73bc1..a6b3be3 100644
--- a/main.tf
+++ b/main.tf
@@ -72,3 +72,14 @@ resource "aws_iam_role_policy_attachment" "default" {
   policy_arn = data.aws_iam_policy.systems_manager.arn
 }

+# 接続性の確認
+resource "aws_ec2_network_insights_path" "gitlab" {
+  source           = aws_instance.gitlab.id
+  destination      = aws_internet_gateway.igw.id
+  destination_port = 80
+  protocol         = "tcp"
+
+  tags = {
+    Name = "GitLab to Internet Gateway"
+  }
+}

これでterraform applyを実行すると、以下のようなパスが構築されます。

「パスの分析」を行って1分程度待つと、結果が出ます。

ルートテーブル rtb-018aaf4d4d950bb1e には igw-07b97c1fd1312ddf4 への適切なルートがありません。rtb-018aaf4d4d950bb1e を参照してください。

ここで気づきました。パブリックサブネットにルーティングを切っていなかった。

というわけで、インターネットゲートウェイへのルーティングを設定して再度試します。

diff -u network.tf{.orig,}
--- network.tf.orig     2022-05-04 21:51:58.000000000 +0900
+++ network.tf  2022-05-04 21:52:21.000000000 +0900
@@ -61,6 +61,27 @@
   depends_on = [aws_internet_gateway.igw]
 }

+# Public Subnetに対するルートテーブル
+resource "aws_route_table" "public" {
+  vpc_id = aws_vpc.this.id
+
+  # サブネット内で閉じる通信以外は、全て Internet Gateway へ向ける
+  route {
+    cidr_block = "0.0.0.0/0"
+    gateway_id = aws_internet_gateway.igw.id
+  }
+
+  tags = {
+    Name = "Route Table for Public Subnet"
+  }
+}
+
+
+resource "aws_route_table_association" "public" {
+  route_table_id = aws_route_table.public.id
+  subnet_id      = aws_subnet.public.id
+}
+
 # Private Subnetに対するルートテーブル
 resource "aws_route_table" "private" {
   vpc_id = aws_vpc.this.id

そうすると、きちんと疎通に成功しました。

感想

プライベートサブネットに配置するEC2に関する疎通のトラブルシュートは結構面倒なのですが、 それに対するソリューションとしてお手軽で良いです。 (このタイプの原因はケアレスミスに起因するからこそ、手がかりがないと結構時間をロスします)

今後このような構築の場合は、Reachability Analyzerを設定するのを基本としても良いなと感じました。

ちなみにReachability Analyzerの解析には、1回$0.1の費用がかかりますのでご注意ください。