使用此代码设置类路径
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
ec2 = new AmazonEC2Client(credentialsProvider);
以下是AwsCredentials.properties文件的格式
# Fill in your AWS Access Key ID and Secret Access Key
# http://aws.amazon.com/security-credentials
accessKey = keyHere
secretKey = secretKeyHere
以下是我得到的例外
Exception in thread "main" com.amazonaws.AmazonClientException: Unable to load AWS credentials from the /AwsCredentials.properties file on the classpath
at com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider.getCredentials(ClasspathPropertiesFileCredentialsProvider.java:81)
at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:8359)
答案 0 :(得分:25)
我使用不同的方法建立连接:
BasicAWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials).withRegion(Regions.US_EAST_1);
DynamoDB dynamoDB = new DynamoDB(client);
可以在Identity and Access Management控制台中创建访问密钥和密钥。我希望它有所帮助...
答案 1 :(得分:13)
您可以使用DefaultAwsCredentialsProviderChain()
,根据documentation,按此顺序查找凭据:
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
(推荐,因为除了.NET之外,所有AWS开发工具包和CLI都能识别它们),或AWS_ACCESS_KEY
和{ {1}}(仅由Java SDK识别)AWS_SECRET_KEY
和aws.accessKeyId
aws.secretKey
)的凭据配置文件答案 2 :(得分:9)
AWSCredentialsProvider credentialsProvider = new ProfileCredentialsProvider();
new AmazonEC2Client(credentialsProvider)
.aws /凭证
[default]
aws_access_key_id =
aws_secret_access_key =
答案 3 :(得分:5)
您收到此异常是因为您的AWS开发工具包无法加载您的凭据。 您应该做的是转到首选项然后转到AWS并添加您的密钥和访问密钥。这样您的项目就可以检索两个密钥。
答案 4 :(得分:3)
尝试使用以下文件格式:
[default]
aws_access_key_id=<your access key>
aws_secret_access_key=<your secret access key>
我使用ProfileCredentialsProvider()将此文件保存为〜/ .aws / credentials。
答案 5 :(得分:1)
如果您使用〜/ .aws / credentials中的凭据文件并使用以下默认配置文件:
[default]
aws_access_key_id=<your access key>
aws_secret_access_key=<your secret access key>
您无需使用BasicAWSCredential
或AWSCredentialsProvider
。只需使用默认构造函数初始化客户端对象,SDK就可以从默认配置文件中获取凭据。示例如下:
AmazonEC2Client ec2Client = new AmazonEC2Client();
此外,有时您需要使用ClientConfiguration初始化客户端以提供代理设置等。示例如下。
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("proxyhost");
clientConfiguration.setProxyPort(proxyport);
AmazonEC2Client ec2Client = new AmazonEC2Client(clientConfiguration);
答案 6 :(得分:1)
由于不推荐使用AmazonDynamoDBClient(凭据),我使用此功能。
init {
val cp= AWSStaticCredentialsProvider(BasicAWSCredentials(ACCESS_KEY, SECRET_KEY))
val client = AmazonDynamoDBClientBuilder.standard().withCredentials(cp).withRegion(Regions.US_EAST_1).build()
dynamoDB = DynamoDB(client)
}
答案 7 :(得分:0)
在Linux服务器中,使用ses
的默认实现将需要.aws/credential
文件中的文件。您可以将以下内容放在以下位置的凭证文件中,它将起作用。 /home/local/<your service account>/.aws/credential
。
[default]
aws_access_key_id=<your access key>
aws_secret_access_key=<your secret access key>
答案 8 :(得分:0)
如果您想通过apache / tomcat使用Environment变量,我发现 可以找到它们的唯一方法是将它们设置在tomcat / bin / setenv.sh中 (设置catalina_opts的位置-在您的设置中可能是catalina.sh)
导出AWS_ACCESS_KEY_ID = *********;
导出AWS_SECRET_ACCESS_KEY = **************;
如果您使用的是ubuntu,请尝试以ubuntu $ printenv身份登录,然后以root用户$ printenv身份登录, 环境变量不一定相同。...
如果只想使用环境变量,则可以使用: com.amazonaws.auth.EnvironmentVariableCredentialsProvider
代替:
com.amazonaws.auth.DefaultAWSCredentialsProviderChain
(默认情况下会检查所有4个可能的位置)
经过数小时试图找出为什么找不到我的环境变量的反正……这对我有用。
答案 9 :(得分:0)
上面有许多正确答案。 特别是在Windows中,当您不存在〜/ .aws /文件夹并且需要创建新文件夹时,事实证明这是另一个问题,这意味着如果您键入“ .aws ”作为名称,它将出错,并且不允许您创建名称为“ .aws”的文件夹。
这是克服这一难题的技巧,即键入“。aws。” 。意思是在开始处加点,在结束处加点。然后只有Windows会接受该名称。我发生了这种情况,因此请在此处提供答案。这样对其他人可能会有帮助。
答案 10 :(得分:0)
在我的情况下,我正在将我的web应用程序部署在docker中:我正在设置
ENV AWS_ACCESS_KEY_ID=blahblah%&/(
ENV AWS_SECRET_ACCESS_KEY=supersecret%&/(
但是我仍然有错误,我通过添加来解决了这个问题
cloud.aws.credentials.useDefaultAwsCredentialsChain=true
在application.properties
内
答案 11 :(得分:0)
用于设置AWS环境可变的Java程序。
Map<String, String> environment = new HashMap<String, String>();
environment.put("AWS_ACCESS_KEY_ID", "*****************");
environment.put("AWS_SECRET_KEY", "*************************");
private static void setEnv(Map<String, String> newenv) throws Exception {
try {
Class<?> processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment");
Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment");
theEnvironmentField.setAccessible(true);
Map<String, String> env = (Map<String, String>) theEnvironmentField.get(null);
env.putAll(newenv);
Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment");
theCaseInsensitiveEnvironmentField.setAccessible(true);
Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null);
cienv.putAll(newenv);
} catch (NoSuchFieldException e) {
Class[] classes = Collections.class.getDeclaredClasses();
Map<String, String> env = System.getenv();
for (Class cl : classes) {
if ("java.util.Collections$UnmodifiableMap".equals(cl.getName())) {
Field field = cl.getDeclaredField("m");
field.setAccessible(true);
Object obj = field.get(env);
Map<String, String> map = (Map<String, String>) obj;
map.clear();
map.putAll(newenv);
}
}
}
}
答案 12 :(得分:0)
如果您正在使用Java和Springboot,并且想在代码中使用它,则下面的配置将起作用。
构建EC2客户端时,添加凭据提供程序
Region region = Region.US_EAST_1;
Ec2Client ec2 = Ec2Client.builder()
.httpClientBuilder(new DefaultSdkHttpClientBuilder())
.credentialsProvider(SystemPropertyCredentialsProvider.create())
.region(region)
.build();
在“应用程序启动”中,
@Value("${aws.accessKeyId}")
private String accessKey;
@Value("${aws.secretKey}")
private String secretKey;
@PostConstruct
public void setSystemProperty(){
SystemPropertiesCredentialsProvider systemPropertiesCredentialsProvider=new SystemPropertiesCredentialsProvider();
System.setProperty("aws.accessKeyId",accessKey);
System.setProperty("aws.secretAccessKey",secretKey);
}
在application.properties文件中,
aws.accessKeyId=
aws.secretKey=
答案 13 :(得分:0)
示例java代码:
//DATA//
//get from: https://console.aws.amazon.com/iam/home?#/security_credentials -> Access keys (access key ID and secret access key) -> Generate key if not exists
String accessKey;
String secretKey;
Regions region = Regions.AP_SOUTH_1; //get from "https://ap-south-1.console.aws.amazon.com/lambda/" > your function > ARN at top right
//CODE//
AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
.withRegion(region)
.build();
List<FunctionConfiguration> functionList= awsLambda.listFunctions().getFunctions();
for (FunctionConfiguration functConfig : functionList) {
System.out.println("FunctionName="+functConfig.getFunctionName());
}
答案 14 :(得分:0)
就我而言,它更愚蠢 - 我更改了系统时间以测试运行并触发 cron 作业。系统时间与 AWS 的其他组件不匹配导致了该问题。