1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

実践!AWSネットワーク構築・運用30日チャレンジ: Day 28

Posted at

Day 28: ネットワークトラブルシューティング実践:よくある問題とその解決策

皆さん、こんにちは!「実践!AWSネットワーク構築・運用30日チャレンジ」のDay 28へようこそ!

昨日はAI/MLワークロードを支えるためのネットワーク設計の考慮事項について学びました。これで、AI時代に求められる、高性能かつ堅牢なネットワークを設計するための知識が深まったことと思います。

これまでの学習で、あなたはAWSネットワークの多様なコンポーネントとその構築方法を習得してきました。しかし、どんなに完璧に設計されたシステムでも、問題は発生するものです。今日のテーマは、まさにその「問題解決」に焦点を当てた、「ネットワークトラブルシューティング実践」です。AWSネットワークでよく発生するトラブルを特定し、効率的に解決するためのアプローチとツールについて学びます。

1. ネットワークトラブルシューティングの基本的なアプローチ

トラブルシューティングは、問題を特定し、原因を突き止め、解決策を適用する体系的なプロセスです。ネットワークトラブルシューティングにおいても、以下の基本的なステップを踏むことが重要です。

  1. 問題の特定と範囲の絞り込み:
    • 何が、いつから、どのように動作しないのか?
    • 特定のユーザー、特定のアプリケーション、特定の時間帯など、影響範囲はどこまでか?
    • エラーメッセージや症状は具体的に何か?
  2. 情報収集:
    • 関連するAWSサービス(VPC, EC2, ALB, Security Group, Route Table, NACL, CloudWatch, VPC Flow Logs, CloudTrailなど)の状況を確認します。
    • 直近の変更履歴を確認します(CloudTrail, Config)。
    • システムの状態を示すメトリクスやログを収集します。
  3. 仮説の立案:
    • 収集した情報に基づいて、考えられる原因をいくつか推測します。
    • 「ルーティングの問題か?」「セキュリティグループの問題か?」「DNS解決の問題か?」「ELBのヘルスチェックの問題か?」など。
  4. 仮説の検証:
    • 各仮説に対して、検証可能なテストを実行します。
    • 問題を切り分けるために、ネットワークパスを段階的にテストします。
  5. 解決策の適用と確認:
    • 原因を特定したら、適切な解決策を適用します。
    • 解決策適用後、問題が解決したことを確認します。
  6. 根本原因の分析と再発防止:
    • 問題が解決しても、なぜ問題が発生したのかの根本原因を特定し、同様の問題が再発しないための対策を講じます(例: IaCによる設定管理の徹底、監視強化、アラート設定)。

2. AWSネットワークトラブルシューティングで役立つツール

AWSは、ネットワークトラブルシューティングに役立つ様々なツールを提供しています。

  1. Amazon CloudWatch:
    • ネットワークメトリクス: EC2のNetworkIn/Out、ALBのHTTPCode_Target_5XX_CountHealthyHostCount、NAT GatewayのErrorPortAllocationなど、様々なリソースのメトリクスを監視し、異常な傾向やしきい値違反を検出します。
    • アラーム: メトリクスのしきい値に基づき、問題発生時に通知(SNS、Lambdaなど)を発報します。
    • ログ: VPC Flow LogsやVPCルーティングテーブルの到達性アナライザーの結果などを集中管理し、Logs Insightsでクエリして分析できます。
  2. VPC Flow Logs (Day 16):
    • VPC内のIPトラフィックの詳細なレコードをキャプチャし、CloudWatch LogsやS3に送信します。
    • 活用法: 特定のIPアドレスやポート間の通信がREJECTされているか、想定外の通信が行われているか、大量のトラフィックが流れているかなどを確認できます。セキュリティグループやNACLの誤設定、不正アクセス、マルウェア通信の検出に非常に強力です。
  3. AWS CloudTrail (Day 17):
    • AWSアカウント内のAPI呼び出し(リソースの作成、変更、削除など)を記録します。
    • 活用法: 「いつ、誰が、何を、どこから」変更したのかを確認し、直近のネットワーク設定変更が問題の原因となっていないかを特定できます。
  4. AWS Config (Day 17):
    • AWSリソースの設定変更履歴を記録し、設定の準拠状況を評価します。
    • 活用法: リソースの設定がいつ、どのように変更されたかを時系列で確認できます。例えば、あるセキュリティグループのルールが予期せず変更された場合など。
  5. VPC Reachability Analyzer:
    • VPC内のリソース間(EC2インスタンス、ENIなど)のネットワークパスをテストし、到達性があるかどうか、もし到達可能であればそのパスの詳細(通過するセキュリティグループ、NACL、ルートテーブルなど)を、到達不可能であればその理由(どのルールでブロックされたかなど)を分析します。
    • 活用法: 複雑なVPCネットワークにおける接続性問題を視覚的に診断し、セキュリティグループやルーティングテーブルの誤設定を効率的に特定できます。
  6. 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ルールを見直し、必要な通信を許可するルールを追加/修正。
  • ルーティングテーブルの問題:
    • 確認:
      • パブリックサブネットの場合: 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のfirewalldiptables、WindowsのWindows Defender Firewall)が通信をブロックしていないか?
    • 解決: OSファイアウォール設定を確認し、必要なポートを開放する。
  • 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を使用している場合はその設定を確認。
  • セキュリティグループのアウトバウンドルール:
    • 確認: インスタンスのセキュリティグループのアウトバウンドルールが、対象サービスへの通信(例: S3のHTTPSポート443)を許可しているか?
    • 解決: 必要なポートと宛先IP/SGへのアウトバウンドを許可するルールを追加/修正。

問題3: ロードバランサー(ALB/NLB)のターゲットにトラフィックがルーティングされない

考えられる原因と確認/解決策:

  • ターゲットグループのヘルスチェック失敗:
    • 確認: ALB/NLBのターゲットグループのヘルスチェックステータスを確認。ターゲットがunhealthyになっているか?
    • 解決: EC2インスタンス上のアプリケーションがポートでリッスンしているか、ヘルスチェックパスが正しいか、インスタンスのセキュリティグループがALBからのヘルスチェックを許可しているかを確認。
  • インスタンスのセキュリティグループ:
    • 確認: ターゲットインスタンスのセキュリティグループが、ALB/NLBのセキュリティグループからのインバウンドトラフィックをターゲットポート(例: 80)で許可しているか?
    • 解決: ALB/NLBのセキュリティグループを送信元とするインバウンドルールを追加。
  • ルーティングテーブルとサブネット:
    • 確認: ターゲットインスタンスが属するサブネットのルートテーブルが適切か?特に、NLBの場合はターゲットタイプがIPの場合、NLBからのトラフィックがインスタンスに到達するルートがあるか?
    • 解決: ルートテーブルを修正。
  • リスナーとターゲットグループの設定:
    • 確認: ALB/NLBリスナーが正しいポートとプロトコルで設定されているか?リスナールールが正しいターゲットグループにトラフィックを転送しているか?
    • 解決: リスナーとルーティングルールを確認/修正。
  • VPC Flow Logs:
    • 活用: ALBのENIからターゲットインスタンスのENIへのトラフィックが到達しているか、拒否されているかを確認。

4. トラブルシューティングの実践例 (思考プロセス)

あなたがWebサイトにアクセスしようとしたところ、「Service Unavailable」エラーが表示されたとします。

  1. 問題の特定と範囲: Webサイト全体にアクセスできない。以前は動いていた。
  2. 情報収集:
    • まずALBのCloudWatchメトリクスを確認。HealthyHostCountが0になっている!HTTPCode_Target_5XX_Countが増加している。
    • TargetResponseTimeが非常に高いか、タイムアウトしている。
    • ALBは正常に稼働しているように見える。
    • CloudTrailで直近のALBやEC2、セキュリティグループの変更がないか確認。特に異常なし。
  3. 仮説の立案:
    • ALBの問題ではなく、ALBのターゲット(EC2 Webサーバー)に問題がある可能性が高い。
    • EC2インスタンスがダウンしているか、Webサーバープロセスが停止しているか、インスタンスへのネットワーク接続が遮断されているか。
    • Webサーバーのセキュリティグループが変更されたか。
  4. 仮説の検証:
    • 仮説1: EC2インスタンスがダウンしているか?
      • EC2コンソールでWebサーバーインスタンスのステータスチェックを確認。2/2 checks passedならインスタンス自体は稼働。
      • SSHでインスタンスに接続してみる。(ここでSSHできないなら問題1のトラブルシューティングに分岐)
      • systemctl status nginx (Webサーバープロセス) を確認。もし停止していれば再起動。→ Webサーバープロセスは動いている!
    • 仮説2: Webサーバーへのネットワーク接続が遮断されているか?
      • インスタンスのセキュリティグループを確認。ALBからのインバウンド80番ポートが許可されているか? → 許可されている!
      • インスタンスのNACLを確認。インバウンド/アウトバウンド80番ポートが許可されているか? → 許可されている!
      • VPC Reachability Analyzerを実行。ALBのENIからWebサーバーインスタンスのENIへのパスをテスト。→ 到達可能、ただし、ヘルスチェックパス/で500エラーが返っていると表示される!
  5. 原因の特定:
    • VPC Reachability Analyzerの結果と、ALBのヘルスチェック失敗が示すように、ネットワーク接続自体は問題ないが、Webサーバーのヘルスチェックパス(/)が返すレスポンスが異常である。これはアプリケーションの問題である可能性が高い。
  6. 解決策の適用:
    • Webサーバーのログ(/var/log/nginx/error.log/var/log/httpd/error_log など)を確認。
    • アプリケーションのコードや設定に問題がないか確認し、修正。
    • 場合によっては、デプロイされたアプリケーションの新しいバージョンにバグが含まれている可能性もある。
  7. 確認: Webサーバーのアプリケーションを修正後、ALBのヘルスチェックがhealthyに戻り、Webサイトにアクセスできることを確認。
  8. 根本原因の分析と再発防止:
    • なぜアプリケーションにバグが混入したのか?テストプロセスは適切か?
    • 監視を強化する(アプリケーションレベルのメトリクス、ログアラート)。
    • デプロイプロセスにロールバックの仕組みを組み込む(例: Blue/Greenデプロイ)。

このように、複数のツールと段階的な思考プロセスを組み合わせることで、複雑なネットワークの問題も効率的に解決できます。

5. まとめと次へのステップ

今日は、AWSネットワークでよく発生するトラブルを効率的に特定し、解決するための体系的なアプローチと、役立つAWSツールについて実践的に学びました。

  • トラブルシューティングは、問題の特定、情報収集、仮説立案、検証、解決策適用、根本原因分析のサイクルで行う。
  • CloudWatch、VPC Flow Logs、CloudTrail、Config、VPC Reachability AnalyzerなどのAWSツールが非常に強力。
  • セキュリティグループ、NACL、ルーティングテーブル、ロードバランサーのヘルスチェックなど、基本的なネットワーク設定が問題の原因となることが多い。

ネットワークエンジニアにとって、トラブルシューティング能力は不可欠なスキルです。今日学んだ知識とツールを活用し、ぜひ実際の環境でも積極的に問題解決に挑戦してみてください。

明日のDay 29では、「AI時代に求められるクラウドネットワークエンジニアのスキルセット」と題して、これまでの学習内容を踏まえ、AIの進化がクラウドネットワークエンジニアにどのような影響を与え、どのようなスキルが将来的に重要になるのかについて考察します。


今日のトラブルシューティング実践、いかがでしたか?これで、もしAWSネットワークで問題が発生しても、落ち着いて対応できる自信がつきましたか?ぜひ「いいね」👍で教えてください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?