2017-12-12 9 views
1

S3 API経由でcephオブジェクトストレージにバケットを作成したいと思います。これは私がニシキヘビboto3を使用している場合、正常に動作します:Java aws sdk - 指定された位置制約が無効です(アマゾン以外)

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 

のJavaで同じことをしようとすると、例外につながる:

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... 

私はインスタンスthis issueのために、いくつかの関連の問題を認識していますが、私はありませんでした私の非アマゾンストレージに提案されたソリューションを調整することができます。

boto3コードを詳しく調べると、領域が指定されていない場合は、LocationConstraintがNoneに設定されていることがわかります。しかし、Javaでリージョンを省略するとInvalidLocationConstrainにもなります。

バケットを正常に作成するには、どのようにしてエンドポイントをjava s3 aws sdkで設定する必要がありますか?

種類は、バケット作成機能を有効にしsigningRegionに "私たち-東-1" を設定する

UPDATE

について:

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

1は別の領域を割り当てた場合、SDKが解析されます指定されたエンドポイントurlからの領域here

私の場合、これは無効な領域につながります(例:non-amazon)。 signingRegionに「私たち-東-1」を設定する

答えて

0

は、バケットの作成機能を有効にします:

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

1は別の領域を割り当てた場合hereが指定されているように、SDKは、エンドポイントURLから地域を解析します。

私の場合、これは非アマゾンなどの無効な領域につながります。

関連する問題