3 votes

Amazon S3 SDK avec une connexion HTTPS

Mon code actuel pour un accès REST basé sur la copie d'objets sur mon bucket S3 ne fonctionne pas. Mon bucket S3 est configuré pour un accès https et a également sse activé. Comment pourrais-je modifier le code ci-dessous pour le faire fonctionner? Actuellement, je reçois juste un message d'erreur 'Caught an AmazonClientException, ce qui signifie que le client a rencontré une erreur en essayant de communiquer avec S3, comme ne pas pouvoir accéder au réseau. Message d'erreur: Impossible d'exécuter la requête HTTP: mybucket.s3.amazonaws.com'

@PUT
    @Path("/copy/{bucketName}")
    public void copyObject(@PathParam("bucketName") String bucketName, @QueryParam("fromPath") String fromPath,
            @QueryParam("toPath") String toPath) throws AmazonClientException {

        AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
        try {

            CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName, fromPath, bucketName, toPath);
            System.out.println("Copie d'objet en cours.");

            s3client.copyObject(copyObjRequest);

        } catch (AmazonServiceException ase) {
            System.out.println("Caught an AmazonServiceException, " + "which means your request made it "
                    + "to Amazon S3, but was rejected with an error " + "response for some reason.");
            System.out.println("Message d'erreur:    " + ase.getMessage());
            System.out.println("Code d'état HTTP: " + ase.getStatusCode());
            System.out.println("Code d'erreur AWS:   " + ase.getErrorCode());
            System.out.println("Type d'erreur:       " + ase.getErrorType());
            System.out.println("ID de requête:       " + ase.getRequestId());
        } catch (AmazonClientException ace) {
            System.out.println("Caught an AmazonClientException, " + "which means the client encountered "
                    + "an internal error while trying to " + " communicate with S3, "
                    + "such as not being able to access the network.");
            System.out.println("Message d'erreur: " + ace.getMessage());
        }
    }

2voto

everydaylearn Points 83

Résolu. Cela s'est avéré être un problème de proxy. J'ai dû faire ce qui suit pour surmonter cela. Lorsque j'ai surmonté le problème de réseau, j'ai eu une autre exception me demandant de définir le point de terminaison S3. Modifications de code ci-dessous.

public static final String PROXY_HOST = "";
public static final int PROXY_PORT = ;
public static final String S3_ENDPOINT = "https://s3.amazonaws.com";

ClientConfiguration clientCfg = new ClientConfiguration();
clientCfg.setProtocol(Protocol.HTTP);
clientCfg.setProxyHost(PROXY_HOST);
clientCfg.setProxyPort(PROXY_PORT);

AmazonS3 s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain(), clientCfg);

s3Client.setEndpoint(S3_ENDPOINT);
s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X