Fehlerbehebung bei Amazon S3 - Amazon Simple Storage Service

Fehlerbehebung bei Amazon S3

Dieser Abschnitt beschreibt die Fehlerbehebung in Amazon S3 und erklärt, wie Sie Anfrage-IDs erhalten, die Sie brauchen, wenn Sie Kontakt mit dem AWS Support aufnehmen.

Fehlerbehebung bei Amazon S3 nach Symptom

Die folgenden Themen listen die Symptome auf, die Ihnen dabei helfen, einige der Probleme zu beheben, die bei der Arbeit mit Amazon S3 auftreten können.

Deutliche Zunahme von HTTP 503-Antworten auf Amazon S3-Anfragen an Buckets mit aktiviertem Versioning

Wenn Sie eine deutliche Zunahme von HTTP 503-Verlangsamungsantworten feststellen, die für Amazon S3- PUT- oder DELETE-Objektanfragen an einen Bucket mit aktiviertem Versioning eingehen, befindet sich möglicherweise ein oder mehrere Objekte im Bucket, für die Millionen von Versionen vorhanden sind. Wenn Sie Objekte mit Millionen Versionen haben, drosselt Amazon S3 automatisch Anfragen an den Bucket, um den Kunden vor übermäßigem Anfragedatenverkehr zu schützen, wodurch potenziell andere Anfragen an denselben Bucket beeinträchtigt werden können.

Um festzustellen, welche S3-Objekte Millionen Versionen haben, verwenden Sie das Tool Amazon S3 inventory. Das Bestandswerkzeug generiert einen Bericht, der eine flache Dateiliste der Objekte in einem Bucket enthält. Weitere Informationen finden Sie unter Amazon S3 inventory.

Das Amazon S3-Team fordert die Kunden auf, Anwendungen zu überprüfen, die wiederholt dasselbe S3-Objekt überschreiben und damit potenziell Millionen Versionen für dieses Objekt erstellen, um festzustellen, ob die Anwendung wie beabsichtigt funktioniert. Wenn Sie einen Anwendungsfall haben, in dem Millionen von Versionen für ein oder mehrere S3-Objekte benötigt werden, wenden Sie sich an das AWS Supportteam unter AWS Support, um Ihren Anwendungsfall zu besprechen und uns zu ermöglichen, die optimale Lösung für Ihr Szenario für Sie zu finden.

Um dieses Problem zu vermeiden, sollten Sie die folgenden bewährte Methoden beachten:

  • Aktivieren Sie eine Ablaufrichtlinie für das Lebenszyklusmanagement „NonCurrentVersion“ und eine „ExpiredObjectDeleteMarker“-Richtlinie, um die vorherigen Versionen von Objekten veraltern zu lassen und Markierungen ohne zugeordnete Datenobjekte im Bucket zu löschen.

  • Halten Sie Ihre Verzeichnisstruktur so flach wie möglich und machen Sie jeden Verzeichnisnamen einzigartig.

Unerwartetes Verhalten beim Zugriff auf Buckets, die mit CORS eingerichtet wurden

Wenn Sie ein unerwartetes Verhalten feststellen, wenn Sie auf Buckets zugreifen, die mit CORS-Konfiguration (Cross-Origin Resource Sharing) eingerichtet wurden, lesen Sie unter Fehlerbehebung bei CORS-Problemen nach.

Amazon S3-Anfrage-IDs für den AWS Support erhalten

Wenn Sie sich an den AWS Support wenden müssen, weil Fehler oder ein unerwartetes Verhalten in Amazon S3 auftreten, benötigen Sie die Anfrage-ID der fehlgeschlagenen Aktion. Diese Anfrage-IDs ermöglichen dem AWS Support, Ihnen bei der Auflösung Ihrer Probleme zu helfen. Anfrage-IDs werden paarweise vergeben. Sie werden in jeder von Amazon S3 verarbeiteten Antwort zurückgegeben (auch in den fehlerhaften). Der Zugriff darauf erfolgt über Verbose-Protokolle. Es gibt verschiedene übliche Verfahren für den Abruf Ihrer Anforderungs-IDs, darunter S3-Zugriffsprotokolle und CloudTrail-Ereignisse/Datenereignisse.

Nachdem Sie diese Protokolle wiederhergestellt haben, kopieren Sie diese beiden Werte. Sie brauchen sie, wenn Sie den AWS Support kontaktieren. Weitere Informationen zum AWS Support finden Sie unter Kontakt.

Anfrage-IDs mit HTTP ermitteln

Sie können Ihre Anfrage-IDs x-amz-request-id und x-amz-id-2 ermitteln, indem Sie die Abschnitte einer HTTP-Anfrage protokollieren, bevor sie die Zielanwendung erreicht. Es gibt verschiedene Tools von Drittanbietern, mit denen Verbose-Protokolle für HTTP-Anfragen wiederhergestellt werden können. Wählen Sie ein Tool, dem Sie vertrauen, führen Sie es aus und überwachen Sie den Port, über den Ihr Amazon S3-Datenverkehr läuft, während Sie eine weitere Amazon S3-HTTP-Anfrage senden.

Für HTTP-Anfragen sieht das Paar der Anfrage-IDs wie in den folgenden Beispielen gezeigt aus.

x-amz-request-id: 79104EXAMPLEB723 x-amz-id-2: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km
Anmerkung

HTTPS-Anfragen werden in den meisten Paketerfassungen verschlüsselt und verborgen.

Anfrage-IDs mit einem Webbrowser ermitteln

Die meisten Webbrowser beinhalten Entwicklerwerkzeuge, die Ihnen gestatten, die Anfrage-Header anzuzeigen.

Für auf einem Webbrowser basierte Anfragen, die einen Fehler zurückgeben, sieht das Paar der Anfrage-IDs wie in den folgenden Beispielen gezeigt aus.

<Error><Code>AccessDenied</Code><Message>Access Denied</Message> <RequestId>79104EXAMPLEB723</RequestId><HostId>IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km</HostId></Error>

Um die das Paar der Anfrage-IDs aus erfolgreichen Anfragen zu erhalten, brauchen Sie die Entwicklerwerkzeuge, um die HTTP-Antwortheader anzuzeigen. Weitere Informationen über Entwicklerwerkzeuge für spezifische Browser finden Sie unter Amazon S3-Fehlerbehebung - Wiederherstellen Ihrer S3-Anfrage-IDs in den AWS Developer-Foren.

Anfrage-IDs mit AWS SDKs ermitteln

Die folgenden Abschnitte enthalten Informationen für die Konfiguration der Protokollierung unter Verwendung eines AWS SDK. Sie können die Verbose-Protokollierung für jede Anfrage und jede Antwort aktivieren, was Sie aber in Produktionssystemen unterlassen sollten, weil große Anfragen/Antworten eine maßgebliche Verlangsamung einer Anwendung verursachen können.

Für AWS SDK-Anfragen sieht das Paar der Anfrage-IDs wie in den folgenden Beispielen gezeigt aus.

Status Code: 403, AWS Service: Amazon S3, AWS Request ID: 79104EXAMPLEB723 AWS Error Code: AccessDenied AWS Error Message: Access Denied S3 Extended Request ID: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km

Verwenden des SDK für PHP zum Abrufen von Anfrage-IDs

Sie können die Protokollierung mit PHP konfigurieren. Weitere Informationen finden Sie unter Wie kann ich sehen, welche Daten übertragen wurden? im FAQ-Abschnitt des AWS SDK für PHP.

Verwenden des SDK für Java zum Abrufen von Anfrage-IDs

Sie können die Protokollierung für spezifische Anfragen oder Antworten aktivieren, um nur die relevanten Header zu erfassen. Dazu importieren Sie die Klasse com.amazonaws.services.s3.S3ResponseMetadata. Anschließend können Sie die Anfrage in einer Variablen speichern, bevor Sie die eigentliche Anfrage ausführen. Rufen Sie getCachedResponseMetadata(AmazonWebServiceRequest request).getRequestID() auf, um die protokollierte Anfrage oder Antwort zu erhalten.

PutObjectRequest req = new PutObjectRequest(bucketName, key, createSampleFile()); s3.putObject(req); S3ResponseMetadata md = s3.getCachedResponseMetadata(req); System.out.println("Host ID: " + md.getHostId() + " RequestID: " + md.getRequestId());

Alternativ können Sie eine Verbose-Protokollierung jeder Java-Anfrage und -Antwort verwenden. Weitere Informationen finden Sie unter Verbose Wire Logging im Thema „Protokollierung von AWS SDK für Java-Aufrufen“ im AWS SDK for Java-Entwicklerhandbuch.

Verwenden des AWS SDK für .NET zum Abruf von Anfrage-IDs

Mit dem eingebauten Protokollierungswerkzeug System.Diagnostics können Sie die Protokollierung in AWS SDK für .NET konfigurieren. Weitere Informationen finden Sie im Post Protokollierung mit dem AWS SDK für .NET (Logging with the AWS SDK for .NET) im AWS-Entwicklerblog.

Anmerkung

Standardmäßig enthält das zurückgegebene Protokoll nur Fehlerinformationen. Die Konfigurationsdatei braucht AWSLogMetrics (und optional AWSResponseLogging), um die Anfrage-IDs zu erhalten.

Verwenden des SDK für Python (Boto3) zum Abrufen von Anfrage-IDs

Mit SDK für Python (Boto3) können Sie spezifische Antworten protokollieren, um nur die relevanten Header zu erfassen. Der folgende Code zeigt, wie Teile der Antwort in einer Datei protokolliert werden:

import logging import boto3 logging.basicConfig(filename='logfile.txt', level=logging.INFO) logger = logging.getLogger(__name__) s3 = boto3.resource('s3') response = s3.Bucket(bucket_name).Object(object_key).put() logger.info("HTTPStatusCode: %s", response['ResponseMetadata']['HTTPStatusCode']) logger.info("RequestId: %s", response['ResponseMetadata']['RequestId']) logger.info("HostId: %s", response['ResponseMetadata']['HostId']) logger.info("Date: %s", response['ResponseMetadata']['HTTPHeaders']['date'])

Sie können auch Ausnahmen abfangen und relevante Informationen protokollieren, wenn eine Ausnahme ausgelöst wird. Weitere Informationen finden Sie unter Erkennen nützlicher Informationen in Fehlerantworten im Boto3-Entwicklerhandbuch.

Darüber hinaus können Sie Boto3 mit dem folgenden Code für die Ausgabe ausführlicher Debugging-Protokolle konfigurieren:

import boto3 boto3.set_stream_logger('', logging.DEBUG)

Weitere Informationen finden Sie unter set_stream_logger in der Boto3-Referenz.

Verwenden des SDK für Ruby zum Abrufen von Anfrage-IDs

Sie können Ihre Anfrage-IDs mit Ruby Version 1, Version 2 oder Version 3 ermitteln.

  • Verwenden von SDK für Ruby – Version 1 – Mit der folgenden Codezeile können Sie eine globale HTTP-Übertragungsprotokollierung aktivieren.

    s3 = AWS::S3.new(:logger => Logger.new($stdout), :http_wire_trace => true)
  • Verwenden von SDK für Ruby – Version 2 oder Version 3 – Mit der folgenden Codezeile können Sie eine globale HTTP-Übertragungsprotokollierung aktivieren.

    s3 = Aws::S3::Client.new(:logger => Logger.new($stdout), :http_wire_trace => true)

Ermitteln von Anfrage-IDs mit der AWS CLI

Sie erhalten Ihre Anfrage-IDs in der AWS CLI, indem Sie Ihrem Befehl --debug hinzufügen.

Weitere Themen zur Fehlersuche und zum Support finden Sie unter:

Weitere Informationen zur Fehlerbehebung unter Verwendung von Tools von Drittanbietern finden Sie unter Abrufen von Amazon S3-Anfrage-IDs in den AWS-Entwicklerforen.