in emr-dynamodb-hadoop/src/main/java/org/apache/hadoop/dynamodb/DynamoDBClient.java [389:454]
protected AWSCredentialsProvider getAWSCredentialsProvider(Configuration conf) {
List<AWSCredentialsProvider> providersList = new ArrayList<>();
// try to load custom credential provider, fail if a provider is specified but cannot be
// initialized
String providerClass = conf.get(DynamoDBConstants.CUSTOM_CREDENTIALS_PROVIDER_CONF);
if (!Strings.isNullOrEmpty(providerClass)) {
try {
providersList.add(
(AWSCredentialsProvider) ReflectionUtils.newInstance(Class.forName(providerClass), conf)
);
} catch (ClassNotFoundException e) {
throw new RuntimeException("Custom AWSCredentialsProvider not found: " + providerClass, e);
}
}
// try to fetch credentials from core-site
String accessKey = conf.get(DYNAMODB_SESSION_CREDENTIAL_PAIR_NAME.getAccessKeyName());
String secretKey;
String sessionKey;
if (Strings.isNullOrEmpty(accessKey)) {
accessKey = conf.get(DEFAULT_CREDENTIAL_PAIR_NAME.getAccessKeyName());
secretKey = conf.get(DEFAULT_CREDENTIAL_PAIR_NAME.getSecretKeyName());
sessionKey = null;
} else {
secretKey = conf.get(DYNAMODB_SESSION_CREDENTIAL_PAIR_NAME.getSecretKeyName());
sessionKey = conf.get(DYNAMODB_SESSION_CREDENTIAL_PAIR_NAME.getSessionKeyName());
}
if (Strings.isNullOrEmpty(accessKey) || Strings.isNullOrEmpty(secretKey)) {
providersList.add(new InstanceProfileCredentialsProvider());
} else if (!Strings.isNullOrEmpty(sessionKey)) {
final AWSCredentials credentials =
new BasicSessionCredentials(accessKey, secretKey, sessionKey);
providersList.add(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
return credentials;
}
@Override
public void refresh() {
}
});
} else {
final AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
providersList.add(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
return credentials;
}
@Override
public void refresh() {
}
});
}
AWSCredentialsProvider[] providerArray = providersList.toArray(
new AWSCredentialsProvider[providersList.size()]
);
AWSCredentialsProviderChain providerChain = new AWSCredentialsProviderChain(providerArray);
providerChain.setReuseLastProvider(true);
return providerChain;
}