我的mule应用程序将json记录写入kinesis流。我使用KPL生产者库。在本地运行时,它从.aws / credentials中选择AWS凭证,并成功将记录写入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文件显式提供凭据的方法。
然后我尝试使用getter / setter创建一个单独的配置文件。将访问密钥和私钥设置为私有,然后强制获取getter:
public AWSCredentialsProvider getCredentials() {
if(accessKey == null || secretKey == null) {
return new DefaultAWSCredentialsProviderChain();
}
return new StaticCredentialsProvider(new BasicAWSCredentials(getAccessKey(), getSecretKey()));
}
}
这打算用这种方式代替DefaultAWSCredentialsProviderChain类---
config.setCredentialsProvider(new AWSConfig().getCredentials());
部署时仍然会抛出相同的错误。 以下repo表示可以提供显式凭据。我需要帮助才能弄明白,因为我找不到合适的文档/示例。 https://github.com/awslabs/amazon-kinesis-producer/blob/master/java/amazon-kinesis-producer-sample/src/com/amazonaws/services/kinesis/producer/sample/SampleProducer.java
答案 0 :(得分:0)
我也遇到了同样的问题,所以我得到了这个解决方案,希望它也对您有用。
@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();