Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Come posso risolvere gli errori di Amazon S3 che ricevo a causa di eccezioni di AWS SDK per Java?
Desidero risolvere gli errori che si verificano quando utilizzo AWS SDK per Java per accedere alle mie risorse Amazon Simple Storage Service (Amazon S3).
Breve descrizione
Quando utilizzi AWS SDK, potresti ricevere i seguenti errori relativi a client e servizi:
- AmazonClientException o SdkClientException
- AmazonServiceException, AwsServiceException o AmazonS3Exception
- UnknownHostException
Per risolvere gli errori precedenti, identifica prima il tipo di eccezione, quindi completa la risoluzione del problema.
Risoluzione
AmazonClientException o SdkClientException
L'errore AmazonClientException o SdkClientException si verifica quando non puoi inviare una richiesta o analizzare una risposta da AWS a causa di errori nel codice del client.
Per risolvere il problema, intraprendi le seguenti azioni:
-
Controlla l'utilizzo delle impostazioni proxy da parte dell'ambiente locale e imposta la configurazione del proxy per S3Client nel codice. Se utilizzi AWS SDK per Java 2.x, configura il client S3 per utilizzare i proxy HTTP.
Se utilizzi AWS SDK per Java 1.x, utilizza il seguente codice per aggiornare la configurazione del client S3:// 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(); -
Esegui una prova della connettività di rete agli endpoint di S3 con strumenti come nslookup, ping, cURL o telnet. Per risolvere i problemi di connettività di rete, consulta Come posso risolvere un errore di connessione quando eseguo i comandi "cp" o sul mio bucket Amazon S3?"sync"
-
Stampa o registra le configurazioni del client S3 per verificare di averlo configurato correttamente.
Esempio di configurazione:// 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()); } } -
Controlla se sono presenti vincoli di connessione o risorse nelle impostazioni del trasporto HTTP nella configurazione del client S3. Per ulteriori informazioni, consulta Configurazione del client e Configurare i client HTTP in AWS SDK per Java 2.x.
-
Esegui questo comando try-catch-finally per chiudere il client S3 il prima possibile in modo che altre richieste possano utilizzare la connessione:
try { .... // your code } catch (Exception e) { .... // catch exception } finally { // close the S3 client s3Client.close(); } -
Se utilizzi credenziali temporanee, esegui questo comando try-catch per verificare che le credenziali non siano scadute:
// 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 o AmazonS3Exception
Se ricevi un errore AmazonServiceException, AwsServiceException o AmazonS3Exception, si è verificato un problema dopo aver inviato con successo la richiesta al servizio AWS. Per risolvere il problema, controlla il codice di stato HTTP nella risposta della traccia dello stack. I seguenti esempi sono alcuni degli errori del codice di stato che potresti riscontrare. Per un elenco completo dei codici di stato HTTP, consulta List of error codes (Elenco dei codici di errore).
HTTP 400
L'errore HTTP 400 si verifica a causa di una sintassi della richiesta non corretta. Prima di inviare la richiesta ad Amazon S3, registra o stampa temporaneamente la richiesta per verificarne la sintassi.
HTTP 409
Verifica se Amazon S3 ha rimosso un bucket eliminato di recente prima di crearne uno nuovo.
HTTP 403
Ricevi un errore Access denied quando non hai l'autorizzazione per eseguire azioni. Controlla le autorizzazioni AWS Identity and Access Management (AWS IAM), le policy di controllo dei servizi (SCP), la policy del bucket S3 e la proprietà degli oggetti per assicurarti di avere autorizzazioni sufficienti. Inoltre, assicurati che le credenziali non siano scadute.
L'errore Access denied si verifica anche quando un principale IAM richiede un oggetto senza autorizzazioni ****"s3:ListBucket" e l'oggetto non esiste nel bucket S3.
Per ulteriori informazioni, consulta Risoluzione dei problemi relativi agli errori di accesso negato (403 Forbidden) in Amazon S3.
HTTP 404
Assicurati che l'oggetto S3 esista nel bucket.
HTTP 500
Ritenta le richieste o introduci un ritardo nel codice. Per impostazione predefinita, ogni modalità di ripetizione standard di AWS SDK prevede tre tentativi massimi. Se i tentativi non risolvono il problema, incrementa il valore.
HTTP 503
Distribuisci gli oggetti tra più prefissi. Per ulteriori informazioni, consulta Come faccio a risolvere un errore HTTP 500 o 503 di Amazon S3?
UnknownHostException
Se ricevi un errore UnknownHostException, assicurati che non siano presenti problemi di risoluzione DNS verso gli endpoint di S3.
Informazioni correlate
- Argomenti
- Storage
- Lingua
- Italiano
