Day 28: ネットワークトラブルシューティング実践:よくある問題とその解決策
皆さん、こんにちは!「実践!AWSネットワーク構築・運用30日チャレンジ」のDay 28へようこそ!
昨日はAI/MLワークロードを支えるためのネットワーク設計の考慮事項について学びました。これで、AI時代に求められる、高性能かつ堅牢なネットワークを設計するための知識が深まったことと思います。
これまでの学習で、あなたはAWSネットワークの多様なコンポーネントとその構築方法を習得してきました。しかし、どんなに完璧に設計されたシステムでも、問題は発生するものです。今日のテーマは、まさにその「問題解決」に焦点を当てた、「ネットワークトラブルシューティング実践」です。AWSネットワークでよく発生するトラブルを特定し、効率的に解決するためのアプローチとツールについて学びます。
1. ネットワークトラブルシューティングの基本的なアプローチ
トラブルシューティングは、問題を特定し、原因を突き止め、解決策を適用する体系的なプロセスです。ネットワークトラブルシューティングにおいても、以下の基本的なステップを踏むことが重要です。
-
問題の特定と範囲の絞り込み:
- 何が、いつから、どのように動作しないのか?
- 特定のユーザー、特定のアプリケーション、特定の時間帯など、影響範囲はどこまでか?
- エラーメッセージや症状は具体的に何か?
-
情報収集:
- 関連するAWSサービス(VPC, EC2, ALB, Security Group, Route Table, NACL, CloudWatch, VPC Flow Logs, CloudTrailなど)の状況を確認します。
- 直近の変更履歴を確認します(CloudTrail, Config)。
- システムの状態を示すメトリクスやログを収集します。
-
仮説の立案:
- 収集した情報に基づいて、考えられる原因をいくつか推測します。
- 「ルーティングの問題か?」「セキュリティグループの問題か?」「DNS解決の問題か?」「ELBのヘルスチェックの問題か?」など。
-
仮説の検証:
- 各仮説に対して、検証可能なテストを実行します。
- 問題を切り分けるために、ネットワークパスを段階的にテストします。
-
解決策の適用と確認:
- 原因を特定したら、適切な解決策を適用します。
- 解決策適用後、問題が解決したことを確認します。
-
根本原因の分析と再発防止:
- 問題が解決しても、なぜ問題が発生したのかの根本原因を特定し、同様の問題が再発しないための対策を講じます(例: IaCによる設定管理の徹底、監視強化、アラート設定)。
2. AWSネットワークトラブルシューティングで役立つツール
AWSは、ネットワークトラブルシューティングに役立つ様々なツールを提供しています。
-
Amazon CloudWatch:
-
ネットワークメトリクス: EC2の
NetworkIn/Out、ALBのHTTPCode_Target_5XX_Count、HealthyHostCount、NAT GatewayのErrorPortAllocationなど、様々なリソースのメトリクスを監視し、異常な傾向やしきい値違反を検出します。 - アラーム: メトリクスのしきい値に基づき、問題発生時に通知(SNS、Lambdaなど)を発報します。
- ログ: VPC Flow LogsやVPCルーティングテーブルの到達性アナライザーの結果などを集中管理し、Logs Insightsでクエリして分析できます。
-
ネットワークメトリクス: EC2の
-
VPC Flow Logs (Day 16):
- VPC内のIPトラフィックの詳細なレコードをキャプチャし、CloudWatch LogsやS3に送信します。
-
活用法: 特定のIPアドレスやポート間の通信が
REJECTされているか、想定外の通信が行われているか、大量のトラフィックが流れているかなどを確認できます。セキュリティグループやNACLの誤設定、不正アクセス、マルウェア通信の検出に非常に強力です。
-
AWS CloudTrail (Day 17):
- AWSアカウント内のAPI呼び出し(リソースの作成、変更、削除など)を記録します。
- 活用法: 「いつ、誰が、何を、どこから」変更したのかを確認し、直近のネットワーク設定変更が問題の原因となっていないかを特定できます。
-
AWS Config (Day 17):
- AWSリソースの設定変更履歴を記録し、設定の準拠状況を評価します。
- 活用法: リソースの設定がいつ、どのように変更されたかを時系列で確認できます。例えば、あるセキュリティグループのルールが予期せず変更された場合など。
-
VPC Reachability Analyzer:
- VPC内のリソース間(EC2インスタンス、ENIなど)のネットワークパスをテストし、到達性があるかどうか、もし到達可能であればそのパスの詳細(通過するセキュリティグループ、NACL、ルートテーブルなど)を、到達不可能であればその理由(どのルールでブロックされたかなど)を分析します。
- 活用法: 複雑なVPCネットワークにおける接続性問題を視覚的に診断し、セキュリティグループやルーティングテーブルの誤設定を効率的に特定できます。
-
Ping, Traceroute (MTR):
- OSレベルの基本的なネットワーク診断ツール。EC2インスタンス内から利用します。
- Ping: 疎通確認とレイテンシの測定。
-
Traceroute (Linuxでは
tracerouteまたはmtr): パケットが通過するネットワーク経路と、各ホップでのレイテンシを確認します。どこでパケットがドロップされているか、遅延が発生しているかを特定できます。
3. よくあるネットワークトラブルと解決策
問題1: EC2インスタンスにSSH/HTTP接続できない
考えられる原因と確認/解決策:
-
セキュリティグループのインバウンドルール:
- 確認: EC2インスタンスにアタッチされているセキュリティグループのインバウンドルールを確認。SSH (ポート22) やHTTP (ポート80) が、あなたのIPアドレスやALBのセキュリティグループからのアクセスを許可しているか?
- 解決: 必要なポートと送信元IP/SGからのアクセスを許可するルールを追加/修正。
-
ネットワークACL (NACL) の設定:
-
確認: インスタンスが属するサブネットに関連付けられているNACLのインバウンド/アウトバウンドルールを確認。SSHやHTTPのポートが明示的に拒否されていないか?必要なポート番号とエフェメラルポート(
1024-65535)のアウトバウンドが許可されているか? - 解決: NACLルールを見直し、必要な通信を許可するルールを追加/修正。
-
確認: インスタンスが属するサブネットに関連付けられているNACLのインバウンド/アウトバウンドルールを確認。SSHやHTTPのポートが明示的に拒否されていないか?必要なポート番号とエフェメラルポート(
-
ルーティングテーブルの問題:
-
確認:
- パブリックサブネットの場合: 0.0.0.0/0 へのルートがインターネットゲートウェイ (IGW) を指しているか?
- プライベートサブネットの場合: 0.0.0.0/0 へのルートがNAT GatewayまたはVPCピアリング/Transit Gatewayなどを指しているか?
- 解決: ルートテーブルを修正し、正しいターゲットを指すようにする。
-
確認:
-
インスタンスのパブリックIPアドレス:
- 確認: インスタンスがパブリックサブネットにある場合、パブリックIPアドレスまたはElastic IP (EIP) が割り当てられているか?
- 解決: EIPを割り当てる、またはインスタンスのパブリックIP自動割り当てを有効にする。
-
OSレベルのファイアウォール:
-
確認: EC2インスタンス内のOSファイアウォール(例: Linuxの
firewalldやiptables、WindowsのWindows Defender Firewall)が通信をブロックしていないか? - 解決: OSファイアウォール設定を確認し、必要なポートを開放する。
-
確認: EC2インスタンス内のOSファイアウォール(例: Linuxの
-
VPC Reachability Analyzer:
- 活用: EC2インスタンスへの接続パスを分析し、どのセキュリティグループやNACL、ルーティングテーブルのルールがブロックしているかを特定する。
問題2: アプリケーションがVPC外のサービス(S3、DynamoDB、外部APIなど)にアクセスできない
考えられる原因と確認/解決策:
-
プライベートサブネットからのインターネットアクセス:
- 確認: インスタンスがプライベートサブネットにあり、NAT Gateway (またはNAT Instance) が正しく設定され、インスタンスのルートテーブルがNAT Gatewayを指しているか?NAT GatewayのセキュリティグループとNACLがアウトバウンド通信を許可しているか?
- 解決: NAT Gatewayを設定し、ルーティングテーブルを修正。
-
VPCエンドポイントの利用ミス:
- 確認: S3やDynamoDBなどAWSサービスにアクセスする場合、VPCエンドポイント(ゲートウェイ型またはインターフェース型)を利用しているか?その場合、VPCエンドポイントポリシーやセキュリティグループがアクセスを許可しているか?
- 解決: VPCエンドポイントポリシーとエンドポイントのセキュリティグループを見直す。
-
DNS解決の問題:
-
確認: インスタンスが参照しているDNSサーバーが正しく名前解決できるか?(例:
nslookup s3.amazonaws.com) -
解決: VPCのDNS設定(
enableDnsSupport,enableDnsHostnames)を確認し、カスタムDNSを使用している場合はその設定を確認。
-
確認: インスタンスが参照しているDNSサーバーが正しく名前解決できるか?(例:
-
セキュリティグループのアウトバウンドルール:
- 確認: インスタンスのセキュリティグループのアウトバウンドルールが、対象サービスへの通信(例: S3のHTTPSポート443)を許可しているか?
- 解決: 必要なポートと宛先IP/SGへのアウトバウンドを許可するルールを追加/修正。
問題3: ロードバランサー(ALB/NLB)のターゲットにトラフィックがルーティングされない
考えられる原因と確認/解決策:
-
ターゲットグループのヘルスチェック失敗:
-
確認: ALB/NLBのターゲットグループのヘルスチェックステータスを確認。ターゲットが
unhealthyになっているか? - 解決: EC2インスタンス上のアプリケーションがポートでリッスンしているか、ヘルスチェックパスが正しいか、インスタンスのセキュリティグループがALBからのヘルスチェックを許可しているかを確認。
-
確認: ALB/NLBのターゲットグループのヘルスチェックステータスを確認。ターゲットが
-
インスタンスのセキュリティグループ:
- 確認: ターゲットインスタンスのセキュリティグループが、ALB/NLBのセキュリティグループからのインバウンドトラフィックをターゲットポート(例: 80)で許可しているか?
- 解決: ALB/NLBのセキュリティグループを送信元とするインバウンドルールを追加。
-
ルーティングテーブルとサブネット:
- 確認: ターゲットインスタンスが属するサブネットのルートテーブルが適切か?特に、NLBの場合はターゲットタイプがIPの場合、NLBからのトラフィックがインスタンスに到達するルートがあるか?
- 解決: ルートテーブルを修正。
-
リスナーとターゲットグループの設定:
- 確認: ALB/NLBリスナーが正しいポートとプロトコルで設定されているか?リスナールールが正しいターゲットグループにトラフィックを転送しているか?
- 解決: リスナーとルーティングルールを確認/修正。
-
VPC Flow Logs:
- 活用: ALBのENIからターゲットインスタンスのENIへのトラフィックが到達しているか、拒否されているかを確認。
4. トラブルシューティングの実践例 (思考プロセス)
あなたがWebサイトにアクセスしようとしたところ、「Service Unavailable」エラーが表示されたとします。
- 問題の特定と範囲: Webサイト全体にアクセスできない。以前は動いていた。
-
情報収集:
- まずALBのCloudWatchメトリクスを確認。
HealthyHostCountが0になっている!HTTPCode_Target_5XX_Countが増加している。 -
TargetResponseTimeが非常に高いか、タイムアウトしている。 - ALBは正常に稼働しているように見える。
- CloudTrailで直近のALBやEC2、セキュリティグループの変更がないか確認。特に異常なし。
- まずALBのCloudWatchメトリクスを確認。
-
仮説の立案:
- ALBの問題ではなく、ALBのターゲット(EC2 Webサーバー)に問題がある可能性が高い。
- EC2インスタンスがダウンしているか、Webサーバープロセスが停止しているか、インスタンスへのネットワーク接続が遮断されているか。
- Webサーバーのセキュリティグループが変更されたか。
-
仮説の検証:
-
仮説1: EC2インスタンスがダウンしているか?
- EC2コンソールでWebサーバーインスタンスのステータスチェックを確認。
2/2 checks passedならインスタンス自体は稼働。 - SSHでインスタンスに接続してみる。(ここでSSHできないなら問題1のトラブルシューティングに分岐)
-
systemctl status nginx(Webサーバープロセス) を確認。もし停止していれば再起動。→ Webサーバープロセスは動いている!
- EC2コンソールでWebサーバーインスタンスのステータスチェックを確認。
-
仮説2: Webサーバーへのネットワーク接続が遮断されているか?
- インスタンスのセキュリティグループを確認。ALBからのインバウンド80番ポートが許可されているか? → 許可されている!
- インスタンスのNACLを確認。インバウンド/アウトバウンド80番ポートが許可されているか? → 許可されている!
-
VPC Reachability Analyzerを実行。ALBのENIからWebサーバーインスタンスのENIへのパスをテスト。→ 到達可能、ただし、ヘルスチェックパス
/で500エラーが返っていると表示される!
-
仮説1: EC2インスタンスがダウンしているか?
-
原因の特定:
- VPC Reachability Analyzerの結果と、ALBのヘルスチェック失敗が示すように、ネットワーク接続自体は問題ないが、Webサーバーのヘルスチェックパス(
/)が返すレスポンスが異常である。これはアプリケーションの問題である可能性が高い。
- VPC Reachability Analyzerの結果と、ALBのヘルスチェック失敗が示すように、ネットワーク接続自体は問題ないが、Webサーバーのヘルスチェックパス(
-
解決策の適用:
- Webサーバーのログ(
/var/log/nginx/error.logや/var/log/httpd/error_logなど)を確認。 - アプリケーションのコードや設定に問題がないか確認し、修正。
- 場合によっては、デプロイされたアプリケーションの新しいバージョンにバグが含まれている可能性もある。
- Webサーバーのログ(
-
確認: Webサーバーのアプリケーションを修正後、ALBのヘルスチェックが
healthyに戻り、Webサイトにアクセスできることを確認。 -
根本原因の分析と再発防止:
- なぜアプリケーションにバグが混入したのか?テストプロセスは適切か?
- 監視を強化する(アプリケーションレベルのメトリクス、ログアラート)。
- デプロイプロセスにロールバックの仕組みを組み込む(例: Blue/Greenデプロイ)。
このように、複数のツールと段階的な思考プロセスを組み合わせることで、複雑なネットワークの問題も効率的に解決できます。
5. まとめと次へのステップ
今日は、AWSネットワークでよく発生するトラブルを効率的に特定し、解決するための体系的なアプローチと、役立つAWSツールについて実践的に学びました。
- トラブルシューティングは、問題の特定、情報収集、仮説立案、検証、解決策適用、根本原因分析のサイクルで行う。
- CloudWatch、VPC Flow Logs、CloudTrail、Config、VPC Reachability AnalyzerなどのAWSツールが非常に強力。
- セキュリティグループ、NACL、ルーティングテーブル、ロードバランサーのヘルスチェックなど、基本的なネットワーク設定が問題の原因となることが多い。
ネットワークエンジニアにとって、トラブルシューティング能力は不可欠なスキルです。今日学んだ知識とツールを活用し、ぜひ実際の環境でも積極的に問題解決に挑戦してみてください。
明日のDay 29では、「AI時代に求められるクラウドネットワークエンジニアのスキルセット」と題して、これまでの学習内容を踏まえ、AIの進化がクラウドネットワークエンジニアにどのような影響を与え、どのようなスキルが将来的に重要になるのかについて考察します。
今日のトラブルシューティング実践、いかがでしたか?これで、もしAWSネットワークで問題が発生しても、落ち着いて対応できる自信がつきましたか?ぜひ「いいね」👍で教えてください!