Amazon Java SDK已經標記爲AmazonS3Client
的構造函數,因此棄用了某些AmazonS3ClientBuilder.defaultClient()
。但是,按照建議,不會導致AmazonS3客戶端的工作方式相同。特別是,客戶以某種方式未能考慮區域。如果您運行以下測試,則thisFails
測試將演示此問題。AmazonS3ClientBuilder.defaultClient()無法解釋區域?
public class S3HelperTest {
@Test
public void thisWorks() throws Exception {
AmazonS3 s3Client = new AmazonS3Client(); // this call is deprecated
s3Client.setS3ClientOptions(S3ClientOptions.builder().setPathStyleAccess(true).build());
assertNotNull(s3Client);
}
@Test
public void thisFails() throws Exception {
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
/*
* The following line throws like com.amazonaws.SdkClientException:
* Unable to find a region via the region provider chain. Must provide an explicit region in the builder or
* setup environment to supply a region.
*/
s3Client.setS3ClientOptions(S3ClientOptions.builder().setPathStyleAccess(true).build());
}
}
com.amazonaws.SdkClientException: Unable to find a region via the region provider chain. Must provide an explicit region in the builder or setup environment to supply a region.
at com.amazonaws.client.builder.AwsClientBuilder.setRegion(AwsClientBuilder.java:371)
at com.amazonaws.client.builder.AwsClientBuilder.configureMutableProperties(AwsClientBuilder.java:337)
at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)
at com.amazonaws.services.s3.AmazonS3ClientBuilder.defaultClient(AmazonS3ClientBuilder.java:54)
at com.climate.tenderfoot.service.S3HelperTest.thisFails(S3HelperTest.java:21)
...
這是一個AWS開發工具包錯誤?是否有一些「區域默認提供商鏈」或某種機制從環境中派生出該區域並將其設置爲客戶端?替代棄用的方法看起來確實很弱,並不會產生相同的能力。
下面是我如何創建s3client: AmazonS3 s3client = AmazonS3ClientBuilder.standard()。build(); –
@JohnHanley由於部署到多個區域,我有點不情願硬編碼'withRegion(「us-east-1」)'作爲這個應用程序。我想我可以從環境中派生出來,但我對實例憑證的工作方式不夠熟悉,並且擔心在部署到AWS時我的桌面上工作的某些內容會失敗。我很善良,希望通過某種方式來利用DefaultAwsRegionProviderChain。 –
標準的方法是使用「環境變量」。我沒有使用DefaultAwsRegionProviderChain,因爲我知道我的存儲桶在哪裏,我把它放在環境變量中。 –