我遇到与here提到的问题类似的问题。我正在使用spring xml配置。我指定了全局AWS上下文凭据。我使用S3出站通道适配器从S3下载文件。我在config.properties文件中指定了我的密钥。我仍然没有看到用于与S3交谈的凭据。
S3-read.xml
db.collection.aggregate([{
$project : {
fieldExists : {
$indexOfBytes : ['$field', 'string']
}
}
}, {
$match : {
fieldExists : {
$gt : -1
}
}
}, {
$limit : 5
}
]);
AWS-credentials.xml
<int-aws:s3-outbound-channel-adapter
transfer-manager="transferManager"
bucket-expression="'${s3.bucket}'"
command-expression="'DOWNLOAD'"
key-expression="headers.S3Key"
progress-listener="progressListener" />
config.properties
<aws-context:context-credentials>
<aws-context:simple-credentials access-key="${aws.accesskey}"
secret-key="${aws.secretkey}"/>
</aws-context:context-credentials>
<!-- Define global region -->
<aws-context:context-region region="${aws.region}"/>
例外是:
aws.accesskey=accesskey
aws.secretkey=secretkey
aws.region=us-west-2
我花了很多时间。当我尝试调试时,它似乎寻找默认凭证提供程序链,它正在寻找环境变量或〜/ .aws / credentials文件。我没有指定任何东西。
如何链接S3以使用这些凭据?谢谢你的帮助。
答案 0 :(得分:0)
在我的项目中,我使用了&#34; BasicAWSCredentials&#34;像这样
public S3StorageService(AmazonS3Config s3Configs) {
ClientConfiguration opts = new ClientConfiguration();
opts.setSignerOverride("S3SignerType");
BasicAWSCredentials credentials = new BasicAWSCredentials(s3Configs.getAccessKey(), s3Configs.getSecretKey());
AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(new EndpointConfiguration(s3Configs.getServiceEndpoint(), ""))
.withClientConfiguration(opts).build();
String defaultBucket = s3Configs.getDefaultBucket();
}
@ConfigurationProperties(prefix = "ds31s3.amazon")
public class AmazonS3Config {
private String accessKey;
private String secretKey;
private String serviceEndpoint;
private String defaultBucket;
在application.properties中
#Amazon S3 Configs
ds31s3.amazon.accessKey=<KEY>
ds31s3.amazon.secretKey=<SECRETKEY>
ds31s3.amazon.serviceEndpoint=<ENDPOINT>
ds31s3.amazon.defaultBucket=bucket-karthik
它运作良好。