Учетные данные контекста Spring AWS — не работают

У меня проблема, аналогичная упомянутой >здесь. Я использую конфигурации spring xml. У меня указаны учетные данные глобального контекста AWS. Я использую адаптер исходящего канала S3 для загрузки файла с S3. Мои ключи указаны в файле config.properties. Я до сих пор не вижу учетные данные, используемые для связи с S3.

s3-read.xml

<int-aws:s3-outbound-channel-adapter  
               transfer-manager="transferManager"
               bucket-expression="'${s3.bucket}'"
               command-expression="'DOWNLOAD'"
               key-expression="headers.S3Key"
               progress-listener="progressListener" /> 

aws-credentials.xml

<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}"/> 

config.properties

aws.accesskey=accesskey
aws.secretkey=secretkey
aws.region=us-west-2

Исключение:

com.amazonaws.SdkClientException: Unable to load AWS credentials from any 
provider in the chain

Я провел с этим много времени. Когда я пытался выполнить отладку, он, кажется, ищет цепочку поставщиков учетных данных по умолчанию, которая ищет переменные среды или файлы ~/.aws/credentials. У меня ничего не указано.

Как связать S3, чтобы использовать эти учетные данные? Спасибо за помощь.


person Preethi    schedule 03.01.2018    source источник


Ответы (1)


В моем проекте я использовал «BasicAWSCredentials», как это

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

и это сработало хорошо.

person karthi    schedule 04.01.2018
comment
Да, через код Java это сработает. Я ищу способ, используя конфигурацию xml. - person Preethi; 04.01.2018