2017-12-12 4 views
1

Ich möchte einen Bucket im Ceph-Objektspeicher über die S3-API erstellen. Welche funktioniert gut, wenn ich Pythons boto3:Java aws sdk - Die angegebene Standortbeschränkung ist nicht gültig (Nicht-Amazon)

s3 = boto3.resource(
    's3', 
    endpoint_url='https://my.non-amazon-endpoint.com', 
    aws_access_key_id=access_key, 
    aws_secret_access_key=secret_key 
) 

bucket = s3.create_bucket(Bucket="my-bucket") # successfully creates bucket 

mit java dem gleichen Versuch führt zu einer Ausnahme:

BasicAWSCredentials awsCreds = new BasicAWSCredentials(access_key, secret_key); 

AwsClientBuilder.EndpointConfiguration config = 
     new AwsClientBuilder.EndpointConfiguration(
       "https://my.non-amazon-endpoint.com", 
       "MyRegion"); 

AmazonS3 s3Client = AmazonS3ClientBuilder.standard() 
     .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) 
     .withEndpointConfiguration(config) 
     .build(); 

List<Bucket> buckets = s3Client.listBuckets(); 
// this works and lists all containers, hence the connection should be fine 
for (Bucket bucket : buckets) { 
    System.out.println(bucket.getName() + "\t" + 
      StringUtils.fromDate(bucket.getCreationDate())); 
} 

Bucket bucket = s3Client.createBucket("my-bucket"); 
// AmazonS3Exception: The specified location-constraint is not valid (Service: Amazon S3; Status Code: 400; Error Code: InvalidLocationConstraint... 

ich von mehreren verwandten Themen bewusst bin, zum Beispiel this issue, aber ich war nicht in der Lage, die vorgeschlagenen Lösungen zu meinem nicht-Amazon-Speicher anzupassen.

Wenn Sie tiefer in den boto3-Code eintauchen, stellt sich heraus, dass LocationConstraint auf None gesetzt ist, wenn keine Region angegeben wurde. Aber das Weglassen der Region in Java führt auch zum InvalidLocationConstrain.

Wie muss ich den Endpunkt mit dem Java s3 aws sdk konfigurieren, um Buckets erfolgreich zu erstellen?

Mit freundlichen Grüßen

UPDATE

Einstellen der signingRegion auf "us-east-1" ermöglicht Eimer Schaffung Funktionalität:

AwsClientBuilder.EndpointConfiguration config = 
      new AwsClientBuilder.EndpointConfiguration(
        "https://my.non-amazon.endpoint.com", 
        "us-east-1"); 

Wenn eine andere Region zuordnet, wird das sdk analysieren die Region von der Endpunkt-URL wie angegeben here.

In meinem Fall führt dies zu einem ungültigen Bereich, zum Beispiel non-amazon.

Antwort

0

die signingRegion Einstellung "us-east-1" bucket Schaffung Funktionalität ermöglicht:

AwsClientBuilder.EndpointConfiguration config = 
     new AwsClientBuilder.EndpointConfiguration(
       "https://my.non-amazon.endpoint.com", 
       "us-east-1"); 

Wenn eine andere Region zuordnet, wird der sdk die Region von Endpunkt-URL analysieren, wie angegeben here.

In meinem Fall führt dies zu einer ungültigen Region, zum Beispiel non-amazon.

Verwandte Themen