1

I am trying to connect to S3 from EC2 instance using AmazonS3Client, to get the list of objects present in S3 bucket. While I can connect to S3 when running this code from my local machine, I am having a hard time running the same code on EC2.

Am I missing any setting or configuration on EC2 instance?

Code

AWSCredentials credentials = new BasicAWSCredentials("XXXX", "YYYY");

AmazonS3Client conn = new AmazonS3Client(credentials);

String bucketName = "s3-xyz";

String prefix = "123";

ObjectListing objects = conn.listObjects(bucketName, prefix);

List<S3ObjectSummary> objectSummary = objects.getObjectSummaries();

for(S3ObjectSummary os : objectSummary)
{
        System.out.println(os.getKey());
}

Errors

ERROR com.amazonaws.http.AmazonHttpClient  - Unable to execute HTTP request: Connect to s3-xyz.amazonaws.com:443 timed out
    org.apache.http.conn.ConnectTimeoutException: Connect to s3-xyz.s3.amazonaws.com:443 timed out
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:551)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:318)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:202)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3037)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3008)
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:531)
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:515)  
John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
Techji
  • 33
  • 2
  • 8
  • Looks like you're facing with similar problem. Check this out http://stackoverflow.com/questions/25754530/running-aws-java-sdk-code-without-public-ip – Fatih Donmez Apr 14 '15 at 14:51
  • 1
    Thanks! I was able to revolve the issue by adding the proxy host configuration for AmazonS3Client. `ClientConfiguration cc = new ClientConfiguration(); cc.setProxyHost("proxy_host"); cc.setProxyPort(4567);` – Techji Apr 15 '15 at 09:54

1 Answers1

1
ClientConfiguration cc = new ClientConfiguration(); 
    cc.setProxyHost("10.66.80.122"); 
    cc.setProxyPort(8080);      
    propertiesCredentials = new BasicAWSCredentials(aws_access_key_id, aws_secret_access_key);
    s3 = new AmazonS3Client(propertiesCredentials,cc);

To find proxy_host & port go to LAN settings.Click to see image.

kartik
  • 2,097
  • 3
  • 21
  • 31