2016-12-14 17 views
1

Я пытаюсь создать ведро из Java-приложения. Мой tomcat настроен на экземпляр AWS EC2. Это дает следующее сообщение об ошибке, в то время как он пытается подключиться к AWS S3:Исключение ограничения местоположения при попытке получить доступ к ведру от клиента aws ec2

com.amazonaws.services.s3.model.AmazonS3Exception: 
The unspecified location constraint is incompatible for the region specific endpoint this request was sent to. 
(Service: Amazon S3; Status Code: 400;..). 

Это пример кода:

public class FileOperationsUtil { 
private final BasicAWSCredentials awsCreds = new BasicAWSCredentials("xyz", "zyz"); 
private final AmazonS3 s3Client = new AmazonS3Client(awsCreds); private final String bucketName = "grex-prod"; 
     //public static final Region ap-south-1; 
public void uploadFile(InputStream fileInputStream, 
String fileUploadLocation, String fileName) throws IOException { 
s3Client.setRegion(Region.getRegion(Regions.AP_SOUTH_1)); 
// Region apsouth1 = Region.getRegion(Regions.ap-south-1);     // s3Client.setRegion(apsouth1);                 // s3Client.setRegion(Region.getRegion(Regions.ap-south-1)); 
//s3Client.create_bucket(bucket, CreateBucketConfiguration={'LocationConstraint': 'ap-northeast-2'}) 
s3Client.createBucket(bucketName); 
File fileToUpload = new File(fileUploadLocation); 
     fileToUpload.mkdirs(); 
// Full file path 
     String fullFilePath = (fileUploadLocation + fileName); 
     ObjectMetadata meta = new ObjectMetadata(); 

     // meta.setContentLength(contents.length); 
     meta.setContentType("image/png"); 

     // Upload files to a specific AWS s3 bucket 
     s3Client.putObject(new PutObjectRequest("grex-prod", fullFilePath, 
       fileInputStream, meta) 
       .withCannedAcl(CannedAccessControlList.Private)); 
    } 
    public void deleteFolder(String oldFullFilePath) { 
     // System.out.println("inside"); 
     ObjectListing objects = s3Client.listObjects(bucketName, oldFullFilePath); 
     for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) { 
s3Client.deleteObject(bucketName, objectSummary.getKey());} 
s3Client.deleteObject(bucketName, oldFullFilePath);} 
+1

Возможно, вам понадобится показать код. Звучит так, как будто вы отправляете запрос в один регион, прося его создать ведро в другом регионе. –

ответ

0

В вашем примере выше:

s3Client.setRegion(Region.getRegion(Regions.AP_SOUTH_1)); 
// Region apsouth1 = Region.getRegion(Regions.ap-south-1);     // s3Client.setRegion(apsouth1);                 // s3Client.setRegion(Region.getRegion(Regions.ap-south-1)); 
//s3Client.create_bucket(bucket, CreateBucketConfiguration={'LocationConstraint': 'ap-northeast-2'}) 

Оба «региона »и« LocationConstraint »должны совпадать. Если вы хотите создать ведро в «ap-south-1», то оба должны быть установлены на это значение.

Ошибка, которую вы получили, вызвана двумя несоответствующими значениями, другими словами, вы подключились к одной области (вероятно, ap-south-1), а затем попытались создать ведро, которое должно существовать в другом регионе (ар-северо-восток-2).

Исключая «LocationConstraint», место, где создается ведро, целиком основано на «регионе», к которому вы подключены. Используя «LocationConstraint», вы можете убедиться, что не пытаетесь создать ведро в регионе, отличном от того, который вы планировали.