Wie behebe ich die Amazon S3-Fehler, die ich vom AWS SDK für Java-Ausnahmen erhalte?
Ich möchte die Fehler beheben, die auftreten, wenn ich das AWS SDK für Java verwende, um auf meine Amazon Simple Storage Service (Amazon S3)-Ressourcen zuzugreifen.
Kurzbeschreibung
Wenn du AWS SDKs verwendest, erhältst du möglicherweise die folgenden Client- und Service-Fehler:
- AmazonClientException oder SdkClientException
- AmazonServiceException, AwsServiceException oder AmazonS3Exception
- UnknownHostException
Um die vorherigen Fehler zu beheben, identifiziere zunächst den Ausnahmetyp und schließe dann die Lösung für das Problem ab.
Lösung
AmazonClientException oder SdkClientException
AmazonClientException oder SdkClientException tritt auf, wenn du aufgrund von Fehlern im Client-Code keine Anfrage an AWS senden oder eine Antwort von AWS nicht analysieren kannst.
Gehe wie folgt vor, um dieses Problem zu beheben:
-
Überprüfe die Verwendung von Proxyeinstellungen in der lokalen Umgebung und lege die Proxykonfiguration im S3Client des Codes fest. Wenn du das AWS SDK für Java 2.x verwendest, konfiguriere den S3-Client für die Verwendung von HTTP-Proxys.
Wenn du das AWS SDK für Java 1.x verwendest, verwende den folgenden Code, um die S3-Client-Konfiguration zu aktualisieren:// Proxy configuration Java 1.x ClientConfiguration clientConfig = new ClientConfiguration(); clientConfig.setProxyHost("your_proxy.example.com"); clientConfig.setProxyPort(YOUR_PROXY_PORT); // Optional: If proxy requires authentication clientConfig.setProxyUsername(YOUR_PROXY_USERNAME); clientConfig.setProxyPassword(YOUR_PROXY_PASSWORD); // Create S3 client with proxy configuration AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(YOUR_REGION) .withCredentials(new AWSStaticCredentialsProvider(credentials)) .withClientConfiguration(clientConfig) .build(); -
Teste die Netzwerkkonnektivität zu S3-Endpunkten mit Tools wie nslookup, ping, cURL oder telnet. Informationen zur Behebung von Problemen mit der Netzwerkkonnektivität findest du unter Wie behebe ich einen Verbindungsfehler, wenn ich die Befehle "cp" oder in meinem Amazon S3-Bucket ausführe?"sync"
-
Drucke oder protokolliere die S3-Client-Konfigurationen, um zu überprüfen, ob du den S3-Client richtig konfiguriert hast.
Beispielkonfiguration:// AWS SDK for Java v1.x public static void validateClientConfiguration(AmazonS3 s3Client) { try { // See: https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ClientConfiguration.html ClientConfiguration config = s3Client.getClientConfiguration(); System.out.println("=== Currnt S3 Client Configuration ==="); // Connection Settings System.out.println("Max Connections: " + config.getMaxConnections()); System.out.println("Connection Timeout: " + config.getConnectionTimeout() + "ms"); System.out.println("Socket Timeout: " + config.getSocketTimeout() + "ms"); System.out.println("Request Timeout: " + config.getRequestTimeout() + "ms"); System.out.println("Client Execution Timeout: " + config.getClientExecutionTimeout() + "ms"); // Retry Settings System.out.println("Max Error Retry: " + config.getMaxErrorRetry()); System.out.println("Retry Policy: " + config.getRetryPolicy()); // Proxy Settings if (config.getProxyHost() != null) { System.out.println("Proxy Host: " + config.getProxyHost()); System.out.println("Proxy Port: " + config.getProxyPort()); } // Protocol Settings System.out.println("Protocol: " + config.getProtocol()); // Region/Endpoint but only if you are using the AmazonS3ClientBuilder client // See https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3ClientBuilder.html System.out.println("Region: " + s3Client.getRegion()); } catch (Exception e) { System.err.println("Error validating client configuration: " + e.getMessage()); } } -
Prüfe, ob die HTTP-Transporteinstellungen in der S3-Client-Konfiguration Verbindungs- oder Ressourcenbeschränkungen enthalten. Weitere Informationen findest du unter Client-Konfiguration und HTTP-Clients.
-
Führe den folgenden Befehl try-catch-finally aus, um den S3-Client so schnell wie möglich zu schließen, damit andere Anfragen die Verbindung verwenden können:
try { .... // your code } catch (Exception e) { .... // catch exception } finally { // close the S3 client s3Client.close(); } -
Wenn du temporäre Anmeldeinformationen verwendest, führe den folgenden Befehl try-catch aus, um zu bestätigen, dass die Anmeldeinformationen nicht abgelaufen sind:
// sample method for AWS SDK Java 2.x public static boolean areCredentialsExpired(AwsCredentialsProvider credentialsProvider) { try { AwsCredentials credentials = credentialsProvider.resolveCredentials(); if (credentials instanceof AwsSessionCredentials) { return false; } } catch (S3Exception e) { //Check if exception contains any expired credentials indication. if("ExpiredToken".equals(e.awsErrorDetails().errorCode())){ return true; } } catch (Exception e) { // If we can't resolve credentials, they're likely expired return true; } return true; }
AmazonServiceException, AWSServiceException oder AmazonS3Exception
Wenn du einen AmazonServiceException-, AWSServiceException- oder AmazonS3Exception-Fehler erhältst, ist ein Problem aufgetreten, nachdem du die Anfrage erfolgreich an den AWS-Service gesendet hast. Um das Problem zu beheben, überprüfe den HTTP-Status-Code in der Stack-Trace-Antwort. Die folgenden Beispiele sind einige der Status-Codefehler, auf die du möglicherweise stößt. Eine vollständige Liste der HTTP-Status-Codes findest du unter Liste der Fehler-Codes.
HTTP 400
Der HTTP 400-Fehler tritt aufgrund einer falschen Anforderungssyntax auf. Bevor du die Anfrage an Amazon S3 sendest, protokolliere oder drucke die Anfrage vorübergehend aus, um die Anforderungssyntax zu überprüfen.
HTTP 409
Prüfe, ob Amazon S3 einen kürzlich gelöschten Bucket entfernt hat, bevor du einen neuen erstellst.
HTTP 403
Du erhältst die Fehlermeldung Access denied, wenn du nicht berechtigt bist, Aktionen auszuführen. Überprüfe die AWS Identity and Access Management (IAM)-Berechtigungen, Service-kontrollrichtlinien (Service Control Policies, SCPs), S3-Bucket-Richtlinien und Objektbesitz, um sicherzustellen, dass du über ausreichende Berechtigungen verfügst. Stelle außerdem sicher, dass die Anmeldeinformationen nicht abgelaufen sind.
Der Fehler Access denied tritt auch auf, wenn ein IAM-Prinzipal ein Objekt ohne ****"s3:ListBucket" Berechtigungen anfordert und das Objekt nicht im S3-Bucket existiert.
Weitere Informationen findest du unter Behebung von Fehlern „access denied“ (403 Forbidden) in Amazon S3.
HTTP 404
Stelle sicher, dass das S3-Objekt im Bucket vorhanden ist.
HTTP 500
Versuche es erneut mit den Anfragen oder verzögere den Code. Standardmäßig hat jeder standardmäßige Wiederholungsmodus des AWS SDK drei maximale Versuche. Wenn diese Versuche das Problem nicht löst, erhöhe den Wert.
HTTP 503
Verteile die Objekte auf mehrere Präfixe. Weitere Informationen findest du unter Wie behebe ich einen HTTP 500- oder 503-Fehler von Amazon S3?
UnknownHostException
Wenn du einen UnknownHostException-Fehler erhältst, stelle sicher, dass es keine Probleme mit der DNS-Lösung in Bezug auf die S3-Endpunkte gibt.
Ähnliche Informationen
- Themen
- Storage
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 5 Monaten