AmazonClientException: невозможно загрузить учетные данные от любого поставщика в цепочке

Мое приложение мула записывает запись json в поток kinesis. Я использую библиотеку производителя KPL. При локальном запуске он выбирает учетные данные AWS из .aws/credentials и успешно записывает запись в Kinesis.

Однако, когда я развертываю свое приложение в Cloudhub, оно генерирует исключение AmazonClientException, очевидно, из-за отсутствия доступа ни к одному из каталогов, поддерживаемых классом DefaultAWSCredentialsProviderChain. (http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html)

Вот как я прикрепляю учетные данные, и это выглядит локально в .aws/credentials:

config.setCredentialsProvider( new 
DefaultAWSCredentialsProviderChain());

Я не мог найти способ явно указать учетные данные, используя файл my-app.properies.

Затем я попытался создать отдельный файл конфигурации с геттерами/сеттерами. установите ключ доступа и закрытый ключ как закрытый, а затем внедрите геттер:

public AWSCredentialsProvider getCredentials() { 
    if(accessKey == null || secretKey == null) { 
        return new DefaultAWSCredentialsProviderChain(); 
    } 

    return new StaticCredentialsProvider(new BasicAWSCredentials(getAccessKey(), getSecretKey())); 
} 

}

Это было предназначено для использования вместо класса DefaultAWSCredentialsProviderChain таким образом ---

config.setCredentialsProvider(new AWSConfig().getCredentials());

Все еще выдает ту же ошибку при развертывании. В следующем репо говорится, что можно предоставить явные учетные данные. Мне нужна помощь, чтобы понять, как это сделать, потому что я не могу найти подходящую документацию/пример. https://github.com/awslabs/amazon-kinesis-producer/blob/master/java/amazon-kinesis-producer-sample/src/com/amazonaws/services/kinesis/producer/sample/SampleProducer.java


person Maga Karaev    schedule 27.10.2017    source источник
comment
ты уже заглянул в PropertiesFileCredentialsProvider?   -  person Jon    schedule 27.10.2017
comment
Я не. Пытаюсь сейчас. Вот как я пытаюсь это сделать, пожалуйста, поправьте меня, если я иду в неправильном направлении. PropertiesFileCredentialsProvider localProperties = new PropertiesFileCredentialsProvider (credPath); localProperties.getCredentials(); config.setCredentialsProvider(localProperties);   -  person Maga Karaev    schedule 27.10.2017


Ответы (1)


Я столкнулся с той же проблемой, поэтому у меня есть это решение, надеюсь, оно сработает и для вас.

@Value("${s3_accessKey}")
private String s3_accessKey;

@Value("${s3_secretKey}")
private String s3_secretKey;

//this above  value I am taking from Application.properties file

BasicAWSCredentials creds = new BasicAWSCredentials(s3_accessKey, 
s3_secretKey); 

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().
withCredentials(new AWSStaticCredentialsProvider(creds))
    .withRegion(Regions.US_EAST_2)
    .build();
person Rohit Gaidhane    schedule 06.01.2020