Fehlerbehebung bei häufigen AWS-Architekturproblemen: Lösungen und Tipps

Navigieren Sie durch häufige Herausforderungen der AWS-Architektur mit diesem praktischen Leitfaden zur Fehlerbehebung. Lernen Sie, Leistungsengpässe, Konnektivitätsprobleme und Probleme mit der Dienstverfügbarkeit zu diagnostizieren und zu beheben. Dieser Artikel bietet umsetzbare Lösungen, Überwachungstipps und Best Practices für den Aufbau robuster und zuverlässiger Anwendungen auf Amazon Web Services.

Fehlerbehebung bei häufigen AWS-Architekturproblemen: Lösungen und Tipps

Die meisten AWS-Architekturprobleme wirken zunächst vage: Die Anwendung ist langsam, eine private Instanz kann keine AWS-API erreichen, ein Load Balancer hat keine gesunden Ziele, oder ein Datenbank-Failover hat sich nicht so verhalten, wie das Diagramm versprochen hat. Die schnellste Fehlerbehebung erfolgt in der Regel, indem man einem einzelnen Anforderungspfad folgt und jeden Hop als gesund nachweist, anstatt Einstellungen im gesamten Konto zu ändern.

Beginnen Sie mit drei Fragen: Was hat sich geändert, was ist das für den Benutzer sichtbare Symptom, und wo hört die Anforderung auf, sich zu bewegen? Sobald Sie wissen, ob der Fehler auf Leistung, Konnektivität, Verfügbarkeit oder Autorisierung zurückzuführen ist, wird die AWS-Konsole viel weniger verrauscht.

Leistungsengpässe

Leistungsprobleme können sich als langsame Anwendungsantwortzeiten, hohe Latenz oder Ressourcenerschöpfung äußern. Die Identifizierung des Engpasses ist entscheidend für eine effektive Optimierung.

Identifizierung von Leistungsengpässen

  • Überwachen Sie wichtige Metriken: Nutzen Sie AWS-Dienste wie Amazon CloudWatch, um Metriken für Ihre Compute-, Speicher- und Datenbankressourcen zu verfolgen. Achten Sie auf:
    • CPU-Auslastung: Eine dauerhaft hohe CPU-Auslastung auf EC2-Instanzen kann auf unzureichende Rechenleistung oder ineffizienten Code hinweisen.
    • Speicherauslastung: Eine hohe Speicherauslastung kann zu Swapping führen, was die Leistung beeinträchtigt. Der EC2-Speicher ist standardmäßig nicht in den grundlegenden Instanzmetriken enthalten. Verwenden Sie daher den CloudWatch-Agenten oder ein Anwendungsüberwachungstool, wenn der Speicher für die Arbeitslast wichtig ist.
    • Netzwerk ein/aus: Spitzen oder anhaltend hoher Netzwerkverkehr können auf ineffiziente Datenübertragung oder erhöhte Last hindeuten.
    • Datenträger-E/A-Operationen (IOPS) & Durchsatz: Bei Diensten wie Amazon EBS und Amazon S3 kann das Überschreiten bereitgestellter Grenzwerte zu speicherbezogenen Verlangsamungen führen.
    • Datenbankverbindungen & Abfragelatenz: Überwachen Sie die Leistung Ihrer Amazon RDS- oder DynamoDB-Instanzen.
  • AWS X-Ray: Für verteilte Anwendungen hilft AWS X-Ray dabei, Anforderungsabläufe zu visualisieren und Leistungsprobleme bei bestimmten Dienstaufrufen zu identifizieren.
  • VPC Flow Logs: Analysieren Sie Netzwerkverkehrsmuster, um unerwartete oder übermäßige Datenübertragungen zu identifizieren.

Lösungen für Leistungsengpässe

  • Skalieren von Ressourcen:
    • Vertikales Skalieren (Hochskalieren): Erhöhen Sie die Instanzgröße (CPU, RAM) Ihrer EC2-Instanzen oder aktualisieren Sie Ihre RDS-Instanzklasse. Verwenden Sie AWS Auto Scaling, um die Kapazität automatisch an die Nachfrage anzupassen.
    • Horizontales Skalieren (Herausskalieren): Fügen Sie Ihrer Anwendungsschicht weitere Instanzen hinzu (z. B. mit EC2 Auto Scaling Groups) oder verteilen Sie die Last auf mehrere Datenbank-Read-Replicas.
  • Optimieren des Anwendungscodes: Überprüfen Sie den Anwendungscode auf ineffiziente Algorithmen, übermäßige Datenbankabfragen oder Speicherlecks.
  • Caching: Implementieren Sie Caching-Strategien mit Amazon ElastiCache (Redis oder Memcached) oder Amazon CloudFront für statische Inhalte, um die Last auf Backend-Dienste zu reduzieren.
  • Datenbankoptimierung: Optimieren Sie SQL-Abfragen, fügen Sie geeignete Indizes hinzu oder erwägen Sie die Migration zu einer leistungsfähigeren Datenbanklösung wie Amazon Aurora.
  • Speicheroptimierung: Wählen Sie den richtigen EBS-Volume-Typ (z. B. gp3 für allgemeine Zwecke, io2 für hohe IOPS) oder nutzen Sie Amazon S3 Intelligent-Tiering für Kosten und Leistung.

Beispiel: Diagnose einer hohen EC2-CPU-Auslastung

  1. Überprüfen Sie CloudWatch-Metriken: Navigieren Sie zu CloudWatch, wählen Sie EC2 aus und zeigen Sie die Metrik CPUUtilization für Ihre Instanz an. Liegt sie dauerhaft über 80-90%, untersuchen Sie die Ursache genauer.
  2. SSH in die Instanz: Verwenden Sie Tools wie top, htop oder ps, um die Prozesse zu identifizieren, die die meiste CPU verbrauchen.
  3. Analysieren Sie Anwendungslogs: Suchen Sie in Ihren Anwendungslogs nach Fehlern oder Mustern, die mit einer hohen CPU-Auslastung korrelieren könnten.
  4. Erwägen Sie eine Skalierung: Wenn die Arbeitslast legitim ist und nicht weiter optimiert werden kann, sollten Sie die Instanzgröße erhöhen oder EC2 Auto Scaling aktivieren.

Konnektivitätsprobleme

Konnektivitätsprobleme können Benutzer daran hindern, auf Ihre Anwendungen zuzugreifen, oder die Kommunikation zwischen AWS-Ressourcen behindern.

Häufige Konnektivitätsszenarien

  • EC2-Instanzen nicht erreichbar: Instanzen innerhalb eines VPC sind möglicherweise nicht aus dem Internet oder von anderen Instanzen aus erreichbar.
  • Fehler bei der Inter-VPC-Konnektivität: Probleme bei der Verbindung von Ressourcen über verschiedene VPCs hinweg.
  • Nichtverfügbarkeit von Dienstendpunkten: Unfähigkeit, von innerhalb Ihres VPC aus eine Verbindung zu AWS-Diensten (z. B. S3, RDS) herzustellen.

Schritte zur Fehlerbehebung

  1. Überprüfen Sie die VPC-Netzwerkkonfiguration:

    • Security Groups: Stellen Sie sicher, dass die an Ihre Instanzen angehängten Security Groups eingehenden Datenverkehr auf den erforderlichen Ports von den richtigen Quell-IP-Adressen oder Security Groups zulassen. Denken Sie daran, dass Security Groups zustandsbehaftet sind.
    • Network Access Control Lists (NACLs): Überprüfen Sie, ob die Ihren Subnetzen zugeordneten NACLs eingehenden und ausgehenden Datenverkehr zulassen. NACLs sind zustandslos, daher benötigen Sie Regeln für beide Richtungen.
    • Routing-Tabellen: Überprüfen Sie die Routing-Tabellen für Ihre Subnetze, um sicherzustellen, dass das Routing zum Internet (über ein Internet Gateway oder NAT Gateway), zu anderen Subnetzen oder zu peered VPCs korrekt ist.
    • Subnetzeinstellungen: Bestätigen Sie, dass sich die Instanzen in den richtigen Subnetzen befinden und dass die Subnetze über entsprechende Routing-Tabellen-Zuordnungen verfügen.
  2. Überprüfen Sie Internet Gateway (IGW) / NAT Gateway:

    • IGW: Stellen Sie sicher, dass Ihre öffentlichen Subnetze eine Route zum IGW für den Internetzugang haben.
    • NAT Gateway: Wenn Ihre Instanzen in privaten Subnetzen Internetzugang benötigen, stellen Sie sicher, dass ein NAT Gateway korrekt konfiguriert ist, einer Elastic IP zugeordnet ist und dass die Routing-Tabellen des privaten Subnetzes Routen zu diesem Gateway enthalten.
  3. Überprüfen Sie VPC Peering / Transit Gateway: Für die Kommunikation zwischen VPCs bestätigen Sie, dass VPC-Peering-Verbindungen oder Transit-Gateway-Anhänge aktiv sind und dass die Routing-Tabellen in allen beteiligten VPCs aktualisiert wurden, um Routen zu den CIDR-Blöcken der peered VPC oder zum Transit Gateway zu enthalten.

  4. Untersuchen Sie die DNS-Auflösung: Stellen Sie sicher, dass Ihr VPC für die Verwendung von DNS konfiguriert ist (z. B. AmazonProvidedDNS unter VPC_CIDR_PLUS_2) und dass die DNS-Auflösung korrekt funktioniert. Verwenden Sie dig oder nslookup von einer Instanz aus, um dies zu testen.

  5. AWS Network Reachability: Verwenden Sie den AWS Reachability Analyzer, um Konnektivitätsprobleme zwischen AWS-Ressourcen innerhalb Ihres VPC oder über VPCs hinweg zu diagnostizieren.

Beispiel: EC2-Instanz aus dem Internet nicht erreichbar

  1. Öffentliche IP-Adresse: Verfügt die EC2-Instanz über eine zugewiesene öffentliche IP-Adresse? Befindet sie sich in einem öffentlichen Subnetz?
  2. Security Group: Überprüfen Sie die an die Instanz angehängte Security Group. Stellen Sie sicher, dass eine eingehende Regel für den Port der Anwendung (z. B. Port 80 für HTTP, 443 für HTTPS) vorhanden ist, die Datenverkehr von 0.0.0.0/0 (oder einem bestimmten IP-Bereich) zulässt.
  3. Network ACL: Überprüfen Sie die dem Subnetz der Instanz zugeordnete NACL. Stellen Sie sicher, dass sie eingehenden Datenverkehr auf dem Anwendungsport und ausgehenden Datenverkehr auf kurzlebigen Ports (1024-65535) für die Antwort zulässt.
  4. Routing-Tabelle: Überprüfen Sie, ob die Routing-Tabelle des Subnetzes eine Route zu einem Internet Gateway enthält (0.0.0.0/0 -> igw-xxxxxx).
  5. Instanzstatus: Läuft die Instanz?

Probleme mit der Dienstverfügbarkeit

Die Gewährleistung einer hohen Verfügbarkeit ist für geschäftskritische Anwendungen unerlässlich. Ausfallzeiten können erhebliche geschäftliche Auswirkungen haben.

Strategien für hohe Verfügbarkeit

  • Multi-AZ-Bereitstellungen: Stellen Sie kritische Ressourcen wie Datenbanken (RDS Multi-AZ) und Anwendungsserver über mehrere Availability Zones (AZs) innerhalb einer Region bereit. Fällt eine AZ aus, kann der Datenverkehr automatisch auf eine andere umgeleitet werden.
  • Lastverteilung: Verwenden Sie Elastic Load Balancing (ELB) – Application Load Balancer (ALB), Network Load Balancer (NLB) oder Classic Load Balancer (CLB) – um den Datenverkehr auf mehrere Instanzen in verschiedenen AZs zu verteilen. ELB-Health-Checks entfernen automatisch instabile Instanzen aus dem Rotationsprozess.
  • Auto Scaling: Implementieren Sie EC2 Auto Scaling, um instabile Instanzen automatisch zu ersetzen und die Kapazität basierend auf Nachfrage und Health-Checks zu erhöhen oder zu verringern.
  • Zustandslose Anwendungen: Entwickeln Sie Anwendungen zustandslos, um das Ersetzen oder Skalieren einzelner Instanzen ohne Datenverlust oder Unterbrechung zu erleichtern.
  • Graceful Degradation: Entwickeln Sie Ihre Anwendung so, dass sie, möglicherweise mit reduzierten Funktionen, auch dann funktioniert, wenn einige Abhängigkeiten nicht verfügbar sind.

Fehlerbehebung bei Verfügbarkeitsproblemen

  1. Health-Checks:

    • ELB-Health-Checks: Stellen Sie sicher, dass Ihre ELB-Health-Check-Konfigurationen korrekt sind und den richtigen Endpunkt und Port testen.
    • EC2 Auto Scaling Health Checks: Überprüfen Sie, ob die Auto-Scaling-Health-Checks korrekt konfiguriert sind.
    • Anwendungs-Health-Endpunkte: Implementieren Sie dedizierte Health-Check-Endpunkte in Ihren Anwendungen, die überwacht werden können.
  2. Analysieren Sie CloudWatch-Alarme: Richten Sie CloudWatch-Alarme für kritische Metriken ein (z. B. hohe Fehlerraten, wenig Speicherplatz, hohe Latenz) und untersuchen Sie alle ausgelösten Alarme umgehend.

  3. Überprüfen Sie AWS Health: Überprüfen Sie das AWS Health Dashboard auf Service-Ereignisse, die Ihr Konto oder Ihre Region betreffen. Für allgemeine öffentliche Ereignisse überprüfen Sie auch die öffentliche AWS Health-Statusseite.

  4. Failover-Tests: Führen Sie regelmäßig Failover-Tests durch (z. B. Beenden einer Instanz in einer AZ), um sicherzustellen, dass Ihre Hochverfügbarkeitsstrategie wie erwartet funktioniert.

Beispiel: Anwendung reagiert nicht aufgrund eines Instanzfehlers

  1. ELB-Health-Checks: Wenn Sie einen ALB verwenden, überprüfen Sie den Health-Status der Zielgruppe. Der ALB sollte die fehlgeschlagene Instanz automatisch als fehlerhaft markieren und keinen Datenverkehr mehr an sie senden.
  2. Auto Scaling: Wenn die Instanz Teil einer Auto-Scaling-Gruppe war, sollte die Gruppe die fehlerhafte Instanz erkennen (über ELB- oder EC2-Health-Checks) und eine Ersatzinstanz starten.
  3. CloudWatch-Metriken: Überwachen Sie Metriken wie HealthyHostCount und UnHealthyHostCount in CloudWatch für Ihren ALB. Überprüfen Sie auch CPUUtilization und NetworkIn/Out für die verbleibenden gesunden Instanzen, um zu sehen, ob sie die erhöhte Last bewältigen.
  4. Logs: Untersuchen Sie Logs der fehlgeschlagenen Instanz (falls möglich) und der neuen Instanz, um zu verstehen, warum der Fehler aufgetreten ist.

Sicherheits-Best Practices zur Vermeidung von Problemen

Auch wenn es sich nicht direkt um Fehlerbehebung handelt, verhindert die Einhaltung von Sicherheits-Best Practices proaktiv viele häufige Architekturprobleme.

  • Prinzip der geringsten Privilegien: Gewähren Sie IAM-Benutzern, -Rollen und -Diensten nur die erforderlichen Berechtigungen.
  • Netzwerksegmentierung: Verwenden Sie VPCs, Subnetze, Security Groups und NACLs, um Ressourcen zu isolieren und den Schaden einer Sicherheitsverletzung zu begrenzen.
  • Regelmäßiges Patchen: Halten Sie Betriebssysteme und Anwendungen auf Ihren EC2-Instanzen gepatcht und auf dem neuesten Stand.
  • Verschlüsselung: Verschlüsseln Sie Daten im Ruhezustand (z. B. EBS-Volumes, S3-Objekte, RDS-Datenbanken) und während der Übertragung (mit TLS/SSL).
  • Protokollierung und Überwachung: Aktivieren Sie detaillierte Protokollierung (CloudTrail, VPC Flow Logs) und richten Sie Überwachung und Alarmierung für verdächtige Aktivitäten ein.

Erstellen Sie ein kleines Runbook

Halten Sie für jede Produktionsarbeitslast ein kurzes Runbook bereit, das den tatsächlichen Anforderungspfad benennt: DNS, CDN, Load Balancer, Compute-Ebene, Datenbank, Cache, Warteschlangen, Objektspeicher und externe Abhängigkeiten. Fügen Sie die spezifischen CloudWatch-Metriken, Zielgruppen, Security Groups, Routing-Tabellen und Dashboards hinzu, die Ihr Team zuerst überprüfen sollte. "AWS überprüfen" ist kein Runbook; "ALB-Ziel-Health, ECS-Service-Ereignisse, RDS Performance Insights und aktuelle CloudTrail-Änderungen für das Vorfallfenster überprüfen" ist um 2 Uhr morgens nützlich.

Die AWS-Fehlerbehebung wird viel ruhiger, wenn Sie Netzwerkfehler von IAM-Fehlern trennen, gute und schlechte Zeitfenster vergleichen und es vermeiden, mehrere Ebenen gleichzeitig zu ändern. Folgen Sie der Anforderung, finden Sie den ersten unterbrochenen Hop und beheben Sie diese Ebene, bevor Sie fortfahren.